根據官方C++標準,有人能解釋爲什麼在使用不同編譯器運行時,以下簡單代碼的輸出存在差異?編譯器差異在g ++ 4.7.2和Intel 13.0.1與clang ++ 3.2和g ++ 4.8
換句話說,沒有標準的離開這個開放的,以第一次會發生什麼,在一個++或B分配?
這是不相關的函數的參數,它的代碼運行在不同的編譯器的同一塊。以下是示例代碼:
#include <iostream>
using namespace std;
int main() {
int a = 10, b;
a = b = a+++a;
cout << "a = " << a << ", b = " << b;
return 0;
}
代碼的鏈接是here。
隨着G ++ 4.7.2和英特爾C++ 13.0.1你:
stdout:
a = 21, b = 20
而與G ++ 4.8.0和鏘++ 3.2你:
stdout:
a = 21, b = 21
哪一個是正確的?謝謝。
恭喜!你是第一百萬人在stackoverflow上問這個問題:)! – us2012 2013-02-14 13:22:52
@ US2012 +1讓我笑:) – 2013-02-14 13:25:29
所有的編譯器是正確的,但是你錯了對編譯器警告與'-Wall',這將節省您的時間問這個問題不轉動。去班級後面 – 2013-02-14 13:30:26