现在的位置: 首页 > 综合 > 正文

改善C++ 程序的150个建议学习之建议6:明晰逗号分隔表达式的奇怪之处

2013年08月28日 ⁄ 综合 ⁄ 共 690字 ⁄ 字号 评论关闭

建议6:明晰逗号分隔表达式的奇怪之处

逗号分隔的表达式是从C继承而来的。它用一种特殊的运算符—逗号运算符将多个表达式连接起来。逗号表达式的一般形式为:

表达式1,表达式2,表达式3......表达式n  需要注意的是,整个逗号分隔表达式的值为表达式n的值。在使用for-循环和while-循环时,经常会使用这样的表达式。然而,由于语言规则不直观,因此理解这样的语句存在一定的困难。例如:

if(++x, --y, x<20 && y>0) /*三个表达式*/
if条件包含由逗号分隔的三个表达式。C++确保每个表达式都会被执行,并产生作用。不过,整个表达式的值仅是最右边表达式的结果。因此,只有当x小于20且y大于0时才会返回true,上述条件也才会为真。再举一个逗号表达式的例子:
int j=10; 
int i=0;
while( ++i, --j)
{
/*只要j不为0就会循环执行*/
}
其实,逗号表达式无非是把若干个表达式"串联"起来。在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值。当然并不是所有地方出现的逗号都是逗号运算符,例如用逗号分隔的函数参数:

printf("%d - %s - %f", count, str, PI);

“count, str, PI”并非逗号分隔表达式,而是printf的三个输入参数。另外一个需要注意的问题就是,在C++中,逗号分隔表达式既可以用作左值,又可以用

作右值。


请记住:逗号分隔的表达式由于语言规则的不直观,容易产生理解上的误差。在使用逗号分隔表达式时,C++会确保每个表达式都被执行,而整个表达式的值则是最右边表达式的结果。

抱歉!评论已关闭.