如果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但编译器产生不同的答案。我可能根据优先顺序缺少某些东西。
如果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但编译器产生不同的答案。我可能根据优先顺序缺少某些东西。
您的两个表达式都会导致未定义的行为,因为尝试在没有介入序列点的情况下多次修改值。对你的问题没有一般的答案。
为什么编译器在每次编译时都会产生相同的一致结果集呢?任何东西都是随机的,物理防止了! – 2013-03-16 15:27:12
@PrakashGautam“即使编译器为未定义的行为生成一致的结果集也是未定义的行为! – 2013-03-16 15:35:33
@PrakashGautam没有人说结果是随机的,它可以是任何东西 - 这就是“未定义行为”的意思 – qrdl 2013-03-16 15:36:09
你应该从不编码++ x * ++ x **,因为那是** undefined bhavior **,并且允许执行任何操作(包括爆炸电脑,甚至做你天真的事情期待) – 2013-03-16 15:13:53