
上QQ阅读APP看书,第一时间看更新
2.5 表达式
将运算符和运算对象连接起来,符合C++语法规则的式子称为C++表达式。根据运算符的不同,表达式可以分为算术表达式、关系表达式、逻辑表达式等。这样的表达式在前面几节已经介绍过,本节主要介绍C++中两个特殊的表达式,即逗号表达式和三目元表达式。
2.5.1 逗号表达式
C++语言中提供了一种特殊的表达式,即逗号表达式。所谓逗号表达式,是指使用逗号运算符将两个表达式连接起来。例如:

对于逗号表达式来说,其运算过程为:先计算表达式1,即“10 * 5”,然后再计算表达式2,即“8 * 9”。整个表达式的值为表达式2的值,也就是最右边表达式的值(如果有多个表达式使用逗号连接)。观察如下代码:

在上面的代码中,iret的值将为15,有些读者可能感到意外,逗号表达式的结果不应该是表达式2的值吗?iret的值应为8。实际上赋值运算符(=)的优先级高于逗号运算符(,),因此,先计算“3 * 5”,将其赋值给iret,再计算iret*4。分析一下下面的代码:

分析变量var的值,var的最终结果为60。因为变量iret的值为15,计算“15*4”即60。
逗号表达式通常应用于for语句中,在for循环语句中修改循环变量,详细内容参见3.4.1节。
2.5.2 三目元表达式
在C++语言中提供了唯一的一个三目元表达式,它是由条件运算符和变量构成的。在开发程序时,经常编写如下形式的if语句(有关if语句的详细介绍参见3.3.1节)。

对于上面的代码,可以使用三目元表达式将其改写为一行代码。

三目元表达式主要由“?”和“:”运算符构成。其中,“?”运算符前面是一个关系表达式,后面的“x:y”表示条件表达式。整个语句的执行过程为:首先判断关系表达式“x > y”的真假,如果为真,则整个三目元表达式的结果为x;如果关系表达式为假,则整个三目元表达式的结果为y。