这是 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
?谁能解释它是如何被解释的?
答案 0 :(得分:9)
由于逗号运算符的优先级非常低,因此表达式
someValue ? ++x, ++y : --x,--y;
相当于:
(someValue ? ++x, ++y : --x),--y;
执行++x, ++y
表达式(将x
和y
设置为1),然后在结尾处使用表达式--y
,将y
恢复为0
注意 - 逗号运算符引入了一个序列点,因此多次修改y
没有未定义的行为。
答案 1 :(得分:3)
表达式
someValue ? ++x, ++y : --x, --y
评估为
(someValue ? ((++x), (++y)) : (--x)), (--y)
如您所见,y
被修改两次,一旦递增并递减一次,因此结果为1 0
而不是1 1
。