为什么 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.
编译器声明文字 i
是 long long
。这是为什么? -2147483648 适合 MSVC x64 上的 int
。
我的编译器是MSVC,目标是64位。
与流行的看法相反,-2147483648 不是文字:C++ 不支持负文字值。
它实际上是一个 compile-time 可计算常量表达式,由 字面值 2147483648 的一元否定组成。
在具有 32 位 int
s 和 long
s 的 MSVC x64 上,2147483648 对于其中任何一个都太大了,因此它会故障转移到您观察到的 long long
类型.
我的片段:
auto i = -2147483648;
int j = 3;
std::swap(i, j); // Compile error about mismatched types here.
编译器声明文字 i
是 long long
。这是为什么? -2147483648 适合 MSVC x64 上的 int
。
我的编译器是MSVC,目标是64位。
与流行的看法相反,-2147483648 不是文字:C++ 不支持负文字值。
它实际上是一个 compile-time 可计算常量表达式,由 字面值 2147483648 的一元否定组成。
在具有 32 位 int
s 和 long
s 的 MSVC x64 上,2147483648 对于其中任何一个都太大了,因此它会故障转移到您观察到的 long long
类型.