【发布时间】:2015-04-08 22:12:12
【问题描述】:
我使用 SO 作为参考已有一段时间了,但之前从未问过问题。我目前正在上大学的 C++ 课程,并且正在阅读 Bjarne Stroutstrup 的Programming: Principles and Practice,只是为了我自己的利益,因为我在这里看到了一个真正推荐它的问题的答案。
目前我们正在课堂上讨论运算符,但我似乎无法理解逗号运算符在语句中的工作原理。一个例子是课程在线部分的一个示例问题,即使我编写了一个 C 程序并使用 GDB 来获得结果,我也会一直出错。问题是:
假设在下面的表达式之前x==16,那么下面的表达式的值是多少(不一定是x的值)?
x++, ++x, x+=x
我对正确答案的兴趣并不在于如何获得正确答案。我已经阅读了几个类似问题的答案,例如这个here,但似乎我错过了当实际上没有分配运算符时这是如何应用的。这和说的一样吗
int y = (x++, ++x, x+=x);
或
int y = x++, ++x, x+=x;
或者两者都不是?有人可以解释一下逗号运算符是如何工作的,特别是与没有赋值的语句有关吗?
【问题讨论】:
-
@SouravGhosh 不,逗号运算符在其操作数之间引入了一个序列点。表达式从左到右排序。
-
@KeithThompson 谢谢先生纠正我。
-
@juanchopanza 先生,不知怎的,我错过了第 6.5.17 章。对于那个很抱歉。我的立场是正确的。
-
@ArunA.S 如果行为未定义或未指定,这将无济于事。
-
请注意
int y = x++, ++x, x+=x;不会编译。
标签: c++ c operator-keyword operator-precedence comma-operator