如果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