关于c ++:为什么MSVC会选择很长的时间作为-2147483648的类型?

Why does MSVC pick a long long as the type for -2147483648?

我的片段:

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

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

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


与流行的看法相反,-2147483648不是文字:C ++不支持负文字值。

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

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