为什么 MSVC 选择 long long 作为 -2147483648 的类型?

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

我的片段:

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++ 不支持负文字值。

它实际上是一个 compile-time 可计算常量表达式,由 字面值 2147483648 的一元否定组成。

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