C++ 中的逗号运算符如何工作?
例如,如果我这样做:
a = b, c;
a最终等于b还是c?
(是的,我知道这很容易测试 - 只需在这里记录一下,以便有人可以快速找到答案。)
Update:这个问题暴露了使用逗号运算符时的细微差别。只是为了记录这一点:
a = b, c; // a is set to the value of b!
a = (b, c); // a is set to the value of c!
这个问题实际上是由代码中的拼写错误引起的。本来的目的是什么
a = b;
c = d;
转换成
a = b, // <- Note comma typo!
c = d;
逗号运算符有lowest所有 C/C++ 运算符的优先级。因此它总是最后一个绑定到表达式的,这意味着:
a = b, c;
相当于:
(a = b), c;
另一个有趣的事实是逗号运算符引入了序列点 http://en.wikipedia.org/wiki/Sequence_point。这意味着该表达式:
a+b, c(), d
保证有它的三个子表达式 (a+b, c() and d)按顺序评估。如果它们有副作用,这一点就很重要了。通常,编译器可以按照他们认为合适的任何顺序来计算子表达式;例如,在函数调用中:
someFunc(arg1, arg2, arg3)
参数可以按任意顺序求值。请注意,函数调用中的逗号是not运营商;他们是分隔符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)