我通過這段代碼MSVC和鐺之間的行爲差異不解:應該如何用C++表示64位整數文字?
#include <iostream>
#include <cstdint>
int main() {
int64_t wat = -2147483648;
std::cout << "0x" << std::hex << wat << std::endl;
return 0;
}
的Visual Studio 2010,2012,和2013年(在Windows 7)的所有顯示:
0x80000000
但叮噹503.0.40(在OSX上)顯示:
0xffffffff80000000
根據C++標準,正確的行爲是什麼?文字應該是零擴展還是符號擴展到64位?
我知道int64_t wat = -2147483648LL;
將導致在這兩個編譯器上的相同結果,但我想知道沒有文字後綴的正確行爲。
@Paul R:「非感性」行爲僅在C89/90中存在,編譯器必須嘗試「int」,「long int」和「unsigned long int」 。包含無符號類型是一個糟糕的決定,它在C099和第一版C++(C++ 98)中被放棄了。現在編譯器必須按照寬度遞增的順序嘗試僅簽名的類型。在這種情況下,C++ 11的唯一區別是增加了long long int。它純粹是定量的。 – AnT 2014-09-02 14:51:52
好的 - 謝謝 - 也許我在C和C++之間混了起來。FWIW無論如何,我總是添加明確的後綴,所以不必考慮行爲應該是什麼。 – 2014-09-02 14:53:57