2013-03-16 82 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