4.7 条件运算符
4.7 条件运算符
条件运算符?:
允许把简单的if-else
逻辑嵌入到单个表达式中,条件运算符按照如下形式使用:
cond ? expr1 : expr2
其中cond
是判断条件的表达式,而expr1
和expr2
是两个类型相同或可能转换为某个公共类型的表达式。
条件运算符的执行过程:
- 求
cond
的值; - 如果条件为真对
expr1
求值并返回该值; - 否则对
expr2
求值并返回该值。
当条件运算符的两个表达式都是左值或者能转换为同一种左值类型时,运算的结果是左值;否则运算的结果是右值。
嵌套条件运算符
允许在条件运算符的内部嵌套另外一个条件运算符。也就是说,条件表达式可以作为另外一个条件运算符的cond
或expr
。
举例如下:使用一对嵌套的条件运算符将成绩分为三档:优秀(high pass)、合格(pass)、不合格(fail)
finalgrade = (grade > 90) ? "high pass"
: (grade < 60) ? "fail" : "pass";
条件运算符满足右结合律,意味着运算对象(一般)按照从右向左的顺序组合。
在输出表达式中使用条件运算符
条件运算符的优先级非常低,因此当一条长表达式中嵌套了条件运算子表达式时,通常需要在它的两端加上括号。
cout << ((grade < 60) ? "fail" : "pass"); // 输出 pass 或者 fail
cout << (grade < 60) ? "fail" : "pass"; // 输出 1 或者 0!
cout << grade < 60 ? "fail" : "pass"; // 错误:试图比较 cout 和 60
第二条表达式等价于
cout << (grade < 60); // 输出 1 或者 0
cout ? "fail" : "pass"; // 根据 cout 的值是 true 还是 false 产生对应的字面值
第三条表达式等价于
cout << grade; // 小于运算符的优先级低于移位运算符,所以先输出 grade
cout < 60 ? "fail" : "pass"; // 然后比较 cout 和 60!