![Visual C++从入门到精通(第5版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/338/27563338/b_27563338.jpg)
上QQ阅读APP看书,第一时间看更新
2.5 表达式
将运算符和运算对象连接起来,符合C++语法规则的式子称为C++表达式。根据运算符的不同,表达式可以分为算术表达式、关系表达式、逻辑表达式等。这样的表达式在前面几节已经介绍过,本节主要介绍C++中两个特殊的表达式,即逗号表达式和三目元表达式。
2.5.1 逗号表达式
C++语言中提供了一种特殊的表达式,即逗号表达式。所谓逗号表达式,是指使用逗号运算符将两个表达式连接起来。例如:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P83_27939.jpg?sign=1738879659-X1QHK4RI8eSxiHoE6PJYkPo2Hot5LjcY-0-1be4e8b03fc004e219fc849ebbbabe42)
对于逗号表达式来说,其运算过程为:先计算表达式1,即“10 * 5”,然后再计算表达式2,即“8 * 9”。整个表达式的值为表达式2的值,也就是最右边表达式的值(如果有多个表达式使用逗号连接)。观察如下代码:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P83_27944.jpg?sign=1738879659-QYV1jzgTCn9580MiP4lVx8WSf0fU9zCs-0-2c8552200e05ce97e10537efd96466be)
在上面的代码中,iret的值将为15,有些读者可能感到意外,逗号表达式的结果不应该是表达式2的值吗?iret的值应为8。实际上赋值运算符(=)的优先级高于逗号运算符(,),因此,先计算“3 * 5”,将其赋值给iret,再计算iret*4。分析一下下面的代码:
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P84_28196.jpg?sign=1738879659-fTtiJD9HwkX7bT9HOOZovp1FBTBEH4zn-0-1c73de66c90273223acb652828784c47)
分析变量var的值,var的最终结果为60。因为变量iret的值为15,计算“15*4”即60。
逗号表达式通常应用于for语句中,在for循环语句中修改循环变量,详细内容参见3.4.1节。
2.5.2 三目元表达式
在C++语言中提供了唯一的一个三目元表达式,它是由条件运算符和变量构成的。在开发程序时,经常编写如下形式的if语句(有关if语句的详细介绍参见3.3.1节)。
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P84_28206.jpg?sign=1738879659-eAcy8xqChPmxSYRAcZFnM3IS9G8jk6Dd-0-804c9ad93a467cf8c2eb43e733cf3f04)
对于上面的代码,可以使用三目元表达式将其改写为一行代码。
![](https://epubservercos.yuewen.com/771DC2/15825992505222206/epubprivate/OEBPS/Images/Figure-P84_28246.jpg?sign=1738879659-WBsiHhcOOfLys0ZaBZKNT8hWry9njNZj-0-9baa1fda9efce9f6dfbcc02062b3fa1a)
三目元表达式主要由“?”和“:”运算符构成。其中,“?”运算符前面是一个关系表达式,后面的“x:y”表示条件表达式。整个语句的执行过程为:首先判断关系表达式“x > y”的真假,如果为真,则整个三目元表达式的结果为x;如果关系表达式为假,则整个三目元表达式的结果为y。