为什么MSVC选择长期为-2147483648的类型?

时间:2016-01-11 15:29:44

标签: c++ visual-c++

我的片段:

auto i = -2147483648;
int j = 3;
std::swap(i, j); // Compile error about mismatched types here. 

编译器声明文字ilong long。这是为什么? -2147483648适合MSVC x64上的int

我的编译器是MSVC,目标是64位。

1 个答案:

答案 0 :(得分:29)

与普遍看法相反,-2147483648 一个字面值:C ++不支持负字面值。

实际上,它是编译时可评估的常量表达式,由 literal 2147483648的一元否定组成。

在具有32位intlong s的MSVC x64上,2147483648对于其中任何一个都太大了,因此它会故障转移到您观察到的long long类型。 / p>