2014-05-21 144 views
-5
int main() 
{ 
    int var = 1; 
    var += ++var; 
    cout<<var; 
    return 0; 
} 

在Java中,如預期的那樣,它將輸出3,但是在C++(上面)中它會輸出4.爲什麼?爲什麼這個程序輸出4,而不是3?

+0

@SeanBright很多小狗都會因爲我們的學習目的而受苦,那麼= \ –

+1

我不認爲我在任何情況下都曾經見過'var + = ++ var;' – celeriko

+0

Java有明確的語義來評估這樣的表達,所以你得到的結果在那裏是可預測的,就像你注意到的那樣。 C++(或C)根本就不是這種情況。 – Mat

回答

6

因爲這是未定義的行爲。您正在修改和訪問同一個變量而沒有中間順序點,因此結果取決於編譯器。如果你編譯這個鏗鏘,你會看到:

unsequenced modification and access to 'var' 

我實際上得到4的答案,但它同樣可以是3,7,123125123或「龍蝦」。

+2

我不會認爲「龍蝦」具有相同的可能性......但是指出:-) –

+1

只是爲了進一步解釋:'var + = ++ var'被指定爲與var = var ++ ++相同var',所以序列的問題將是「在var + ++ var'中,首先評估哪一邊?」如果先評估左側,那麼當我們評估左側時var不會增加。如果首先評估右側,那麼左側將隨着我們評估它的時間而增加。 Java說表達式從左到右進行評估。 C++沒有指定順序,而是說具有此歧義的代碼沒有任何定義的行爲。 – bames53

相關問題