三元操作的回报价值是什么?“:”?

时间:2012-04-10 07:07:32

标签: c

我的同学问我一个问题:

此后x,y,z的值是多少:

x=5;
y=8;
z=((x++)<(y++)?(x++):(y++));

我不确定,所以我测试了它,答案是:

x=7,y=9,z=6

我能理解为什么“x = 7”和“y = 9”,但为什么“z = 6”?这个表达式不应该返回由“x ++”计算的值吗?

感谢您的帮助:)

1 个答案:

答案 0 :(得分:7)

?运算符的第一个操作数和第二个或第三个运算符的求值之间存在sequence point,因此第一个x++将完全生效,从而导致x = 6。但是第二个x++的增量只有在完整表达式的评估之后才会生效,因为该表达式中没有更多的序列点,因此x保持为6且z = 6。