2012-04-10 52 views
2

我的同学问我一个问题:三元操作“?:”的返回值是什么?

什么是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 ++”计算的值吗?

感谢您的帮助:)

+3

“三元”,而不是“三目”。 “眼睛”意味着视觉,除非你是来自Tau Ceti的眼睛mon mon的怪物,它不适用于你:-) – paxdiablo 2012-04-10 07:13:40

+2

第二个'x ++'计算的值是6;这就是为什么'z'被赋值的原因。6.'x'中的值在7之后,但后增量意味着增量前的值被赋值为'z'。 – 2012-04-10 07:14:54

+0

哦再次顺序点........ >> !!! – 2012-04-10 07:31:18

回答

7

?运营商和第二或第三运营商,并因此第一x++的第一操作数的评价之间的sequence point将完全采取导致X = 6的效果。但是第二个x++中的增量只有在评估完整表达式后才会生效,因为该表达式中不再有序列点,因此x保持6且z = 6。