这是C++ Primer 5th的练习:
Exercise 4.33: Explain what the following expression does(Page158): someValue ? ++x, ++y : --x, --y
代码:
bool someVlaue = 1;
int x = 0;
int y = 0;
someVlaue ? ++x, ++y : --x,--y;
std::cout << x << std::endl << y << std::endl;
我尝试了 Gcc4.81
和 Clang3.5
,都给了我:
1
0
Press <RETURN> to close this window...
为什么不是 1
和 1
?任何人都可以解释它是如何解释的吗?
最佳答案
由于逗号运算符的优先级非常低,表达式
someValue ? ++x, ++y : --x,--y;
相当于:
(someValue ? ++x, ++y : --x),--y;
所以执行了++x,++y
表达式(设置x
和y
为1),紧接着是表达式--y
最后,将 y
恢复为 0.
注意 - 逗号运算符引入了一个序列点,因此多次修改 y
不会出现未定义的行为。
关于c++ - 编译器如何根据优先级和关联性来解释这个表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22828628/