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

Coa*_*aku 2 c

我的同学问我一个问题:

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

x=5;
y=8;
z=((x++)<(y++)?(x++):(y++));
Run Code Online (Sandbox Code Playgroud)

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

x=7,y=9,z=6
Run Code Online (Sandbox Code Playgroud)

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

感谢帮助 :)

Pav*_*ath 7

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