定义

三目运算符,又称条件运算符,指的是计算机语言(c,c++,java等)的重要组成部分。它是唯一有3个操作数的运算符,所以有时又称为三元运算符。一般来说,三目运算符的结合性是右结合的。

<表达式1> ? <表达式2> : <表达式3>; “?”运算符的含义是:先求表达式 1 的值,如果为真,则执行表达式 2,并返回表达式 2 的结果;如果表达式 1 的值为假,则执行表达式 3,并返回表达式 3 的结果。a ? b : c 简单理解方式为:

1
2
3
4
5
6
7
if(a)
{
return b;
} else
{
return c;
}

三目运算符的合理使用可以精简话代码,与 if else 比执行效率可以提高约 30% 左右(来自实验数据)。

使用注意

首先必须注意三目运算符中有三个表达式,整体加上 ; 构成一个语句。表达式,是由数字、算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合,表达式都是有返回值的。

return x; 语句无法作为三目运算符的表达式。典型的错误使用如: (a>1)?(return 0):(return 1);。首先,三目运算符后跟的是表达式,而 return x; 为一个完整的语句,不是表达式无返回值;return x 既不是语句也不是表达式。因此 return 无法放到三目运算符中。但有时候为了灵活的使用,我们可以反过来将三目运算符放到 return 语句中。如: return (a>1 ? 0 : 1); 这条语句是合法的,并且也经常被使用。

除此之外,部分编译器在使用三目运算符时,要求表达式 2 和 3 的返回类型一致。具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
void fun1(void)
{}
void fun2(void)
{}
int fun3(void)
(a>1) ? fun1() : fun2(); // 可行
(a>1) ? (a=1) : (a=2); // 可行
(a>1) ? fun1() : (a=2); // 报错
(a>1) ? fun1() : fun3(); // 可行

(a>1) ? fun1() : (a=2); 的报错在于 fun1() 返回值为 void 而 a=2 返回值为整型。将两者类型修改为一致,成 (a>1) ? fun1() : (void)(a=2); (a>1) ? fun1() : (void)fun3(); 即可编译通过。

有关 return 语句补充说明一点,if (a>1) {return 0} 无法用三目运算符代替,只能用 if 语句来写,而 if (a>1) {a = 1} 则可以用与运算符来写 a>1 && a=1;