您的位置:首页 > 编程语言 > C语言/C++

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

2013-09-09 14:19 295 查看
建议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++会确保每个表达式都被执行,而整个表达式的值则是最右边表达式的结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐