一千萬個為什麽

搜索

當我總是得到相同的結果時,為什麽這個未定義的行為?

我最近在這個網站上遇到了一個關於C ++序列點的問題 這段代碼將輸出什麽:

int c=0;
cout << C++ << c;

It was answered that the output is undefined and << is not a sequence point, but still I want to know why is it undefined when, even if I compile it 25 times, it still always prints 01?

最佳答案

“未定義”意味著標準沒有指定在那種情況下必須發生的事情,因此根據定義,編譯器所做的任何事情都是正確的。如果它總是打印 01 ,那很好。如果每次運行時都打印出不同的數字,那也沒關系。如果它導致猴子飛出你的鼻子(如這裏所示),那就沒問題了同樣。

您可能不這麽認為,但如果發生這種情況,編譯器編寫者就會陷入困境。

[編輯:在評論中已經指出,炮彈是“鼻子惡魔”,而不是“鼻猴”。我為任何意外的混亂道歉。任何意圖混淆我為此感到自豪並且不為此道歉。 :-)]

轉載註明原文: 當我總是得到相同的結果時,為什麽這個未定義的行為?