![C++新经典](https://wfqqreader-1252317822.image.myqcloud.com/cover/184/44510184/b_44510184.jpg)
上QQ阅读APP看书,第一时间看更新
4.3 条件运算符和switch语句
4.3.1 条件运算符
在谈条件运算符之前,先看一个if语句的范例:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p83_85454.jpg?sign=1739350772-4JjUmLDM4cgHjmNUhZOFKudlHpUjAfjY-0-b0a3193339d0ea476b0373ef418ba48a)
上面这段代码很简单,含义是将a、b两个变量中的最大值赋给max变量。其中整个if语句(从if行开始的下面四行都包括在内)可以用如下一行语句代替:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p83_85455.jpg?sign=1739350772-x7t0h0HSc400JHkLBgDIKO9aQvnl7nZ7-0-08b504b65ef411ed77f1869c24af1d7d)
去掉末尾的分号,剩余的(a>b)? a:b就是条件表达式。这个条件表达式是这样执行的:如果(a>b)的条件为真,则取a的值作为整个表达式的值,否则取b的值作为整个表达式的值。
可以看到,条件表达式中用到的“?:”组合被称为条件运算符,条件运算符有三个操作对象,因此也被称为三目运算符,它是C语言中唯一一个三目运算符。其一般形式为:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p83_46606.jpg?sign=1739350772-K5msqvW43G55vFs1mCpUED1Qa1QDYNe5-0-55a9f643cc2adb8247d7b064470a3daf)
执行流程如图4.5所示。
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-P83_46607.jpg?sign=1739350772-FLXS4D3ZDX2VxzBDL1tQQoToZFvjOAkS-0-809aee5d889d366ca4dc2862d4bdc45d)
图4.5 条件表达式执行流程图
条件运算符的执行顺序:先求解表达式1的值,若为非0(真),则求解表达式2的值,此时表达式2的值就作为整个条件表达式的值,若表达式1的值为0(假),则求解表达式3的值,此时表达式3的值就作为整个条件表达式的值。
所以,“max=(a>b)? a:b;”的求解步骤就是将a和b两个变量中较大的值赋给max。注意,条件运算符优先级高于赋值运算符,所以是先计算条件表达式的值,再将计算结果赋值给max。另外,因为条件运算符优先级比关系运算符低,因此“max=(a>b)? a:b;”可以写成“max=a>b? a:b;”,此外,条件运算符的结合顺序是从右到左,所以,“a>b? a:c>d?c:d;”等价于“a>b? a:(c>d?c:d);”,运算符的优先级与结合性参考表2.6。
条件运算符的使用看个人习惯,使用频率并不太高,因为它的能力比较有限,只能做一些简单判断和计算,但是当看到这种用法的时候也必须要能够认识。