设为首页 加入收藏

TOP

建议6:明晰逗号分隔表达式的奇怪之处
2013-10-07 14:47:57 来源: 作者: 【 】 浏览:56
Tags:建议 明晰 逗号 分隔 表达式 奇怪

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

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

  1. 表达式1,表达式2,表达式3......表达式n 

需要注意的是,整个逗号分隔表达式的值为表达式n的值。

在使用for-循环和while-循环时,经常会使用这样的表达式。然而,由于语言规则不直观,因此理解这样的语句存在一定的困难。例如:

  1. if(++x, --y, x<20 && y>0)  /*三个表达式*/ 

if条件包含由逗号分隔的三个表达式。C++(www.cppentry.com)确保每个表达式都会被执行,并产生作用。不过,整个表达式的值仅是最右边表达式的结果。因此,只有当x小于20且y大于0时才会返回true,上述条件也才会为真。再举一个逗号表达式的例子:
  1. int j=10;  
  2. int i=0;  
  3. while( ++i, --j)  
  4. {  
  5.     /*只要j不为0就会循环执行*/  

其实,逗号表达式无非是把若干个表达式"串联"起来。在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值。

当然并不是所有地方出现的逗号都是逗号运算符,例如用逗号分隔的函数参数:

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

“count, str, PI”并非逗号分隔表达式,而是printf的三个输入参数。

另外一个需要注意的问题就是,在C++(www.cppentry.com)中,逗号分隔表达式既可以用作左值,又可以用作右值。

请记住:

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

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇建议34:用智能指针管理通过new创.. 下一篇建议3:对表达式计算顺序不要想当..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: