2013-03-16 87 views
-4

如果int x=5;我想表达y=++x * ++x;被评价为:一元++优先顺序

首先执行++x引起x=6,然后再次使++x然后x=7表达式计算y=x*x使得y=49 值使用相同的推理的下面的代码行

int z=5, x=5,y=0,p=0; 
y=++x * ++x + ++x; 
p= ++z + ++z * ++z; 

应该评价的y和相同的值0但编译器产生不同的答案。我可能根据优先顺序缺少某些东西。

+0

你应该从不编码++ x * ++ x **,因为那是** undefined bhavior **,并且允许执行任何操作(包括爆炸电脑,甚至做你天真的事情期待) – 2013-03-16 15:13:53

回答

3

您的两个表达式都会导致未定义的行为,因为尝试在没有介入序列点的情况下多次修改值。对你的问题没有一般的答案。

+0

为什么编译器在每次编译时都会产生相同的一致结果集呢?任何东西都是随机的,物理防止了! – 2013-03-16 15:27:12

+1

@PrakashGautam“即使编译器为未定义的行为生成一致的结果集也是未定义的行为! – 2013-03-16 15:35:33

+1

@PrakashGautam没有人说结果是随机的,它可以是任何东西 - 这就是“未定义行为”的意思 – qrdl 2013-03-16 15:36:09