【C++三目运算符你知道多少种使用方法】

传送门

  • 前言
  • 使用方法
    • 代替`if...else...`
    • 在三目运算符中使用函数(指针)
    • 逗号表达式
  • 完整源码

前言

相信大家都知道并且使用过我们今天的主角——三目运算符? :,但是除了可以用它代替if... else...之外,他还有着更强大的 奇怪的功能,相信大家在leetcode刷题的时候也能不时地遇见他们。今天就来给大家总结下他的奇怪用法。如有错误,请在留言或私信中指出!感激不尽!

使用方法

代替if...else...

这是最基本的使用方法。a?b:c 当a的值为真时,返回b,当a的值为假时,返回c;
示例:

//完整可执行源码请看篇末
	int a=0;
	//if...else...语句
	if(a)
		cout<<("a为真\n");
	else
	    cout<<("a为假\n");
	//三目运算符代替if...else...语句
	a?cout<<("a为真\n"):cout<<("a为假\n");

	return 0;

在三目运算符中使用函数(指针)

三目运算符中可以使用函数,但是需要保证前后的返回值类型相同。

//完整可执行源码请看篇末
	//三目运算符中使用函数,三目运算符的前后值类型要一致。(这里的int()可以随便一个整数代替
	bool flag=true;
	flag?Test1():int();
	flag?Test():void();//也可以使用空变量
	
	//函数指针。这行语句也可以写成这样:auto func=flag?&Test:nullptr;
    void (*func)()=flag?&Test:nullptr;
    
	//注意,对于函数指针来说,要提前判空才能去调用
	if(func!=nullptr){
		func();
	}
	//或者使用三目运算符写成以下这样
	func?func():void();

逗号表达式

这是一种能够将你的代码压缩到一行的方法,在三目运算符中,逗号表达式内的最后一个值才会被返回,而前面的语句只会被执行。

//完整可执行源码请看篇末
	//逗号表达式,逗号表达式仅最后的值有效,前面的单纯是执行而已。
	flag?(Test1(),Test2(),NULL):NULL;
	//逗号表达式中甚至可以赋值,用以下方式
	flag?((res=10),Test1(),Test2(),NULL):NULL;
	cout<

完整源码

#include 
using namespace std;
void Test(){
	cout<<"Test called\n";
}
int Test1(){
		cout<<"Test1 called\n";
	return 0;
	}
int Test2(){
	cout<<"Test2 called\n";
	return 0;
}
int main(){
	bool a=true;
	int res =0;
	//if...else...语句
	if(a)
		res = 1;
	else
	    res = 2;
	//三目运算符代替if...else...语句
	res = a?1:2;
	cout<

(今天看见一张不错的图分享下,侵删。图源:https://twitter.com/miku_emori/status/1077144148694642688)

你可能感兴趣的:(c++)