在整数a、b已经被定义的前提下,a = (b++,a*2)是合法的C++代码,其中的逗号是一个操作符。在作者看来,C++中的逗号操作符是一项非常反直觉并且容易导致错误的语法特性,建议读者非必要不使用。
版权声明
本文可以在互联网上自由转载,但必须:注明出处(作者:海洋饼干叔叔)并包含指向本页面的链接。
本文不可以以纸质出版为目的进行改编、摘抄。
一个逗号操作符的语法形式通常表现为:
1 | expr1, expr2 |
这是一个表达式,以中间的逗号为分隔,左边为子表达式1,右边为子表达式2。当逗号操作符被应用时,C/C++会分别评估/计算子表达式expr1和expr2的值,然后再将expr2的值作为整个表达式的值。
1 | a = (3+1,2); |
在上述代码中,(3+1,2)是一个用括号括起来的包含逗号操作符的表达式。其中,3+1是左表达式,2是右表达式,最终,右表达式的值2会作为整个表达式的值被赋值给变量a。
我们通过下述示例进一步解释:
1 | //Project - CommaOperator |
上述代码的执行结果为:
1 | a = 6, b = 8 |
第7行:(b++,a2)为一个用括号括起来的包含逗号操作符的表达式,其左表达式b++被计算/评估,b值从7变为8;其右表达式a\2也被计算/评估,由于a值为3,所以右表达式a*2的值为6,右表达式的值6最终被作为整个表达式的值赋值给变量a,变量a得值6。
注意:由于括号的参与,表达式“b++,a*2”先被计算,得到表达式结果后,再将表达式的值赋值给a。
从执行结果容易看出,a为6,b为8,与前述分析相符。