为什么 MSVC 选择 long long 作为 -2147483648 的类型?
我的片段:
auto i = -2147483648;
int j = 3;
std::swap(i, j); // Compile error about mismatched types here.
编译器声明文字 i
是一个 long long
.这是为什么?-2147483648 适合 MSVC x64 上的 int
.
The compiler states that the literal i
is a long long
. Why is that? -2147483648 fits in an int
on MSVC x64.
我的编译器是 MSVC,目标是 64 位.
My compiler is MSVC, target is 64 bits.
推荐答案
与普遍看法相反,-2147483648 不是一个字面量:C++ 不支持负字面量值.
Contrary to popular belief, -2147483648 is not a literal: C++ does not support negative literal values.
事实上,它是一个编译时可评估的常量表达式,由文字 2147483648的一元否定组成.
It is, in fact, a compile-time evaluable constant expression consisting of a unary negation of the literal 2147483648.
在具有 32 位 int
s 和 long
s 的 MSVC x64 上,2147483648 对于其中任何一个来说都太大,因此它会故障转移到 long long
你观察到的类型.
On MSVC x64, which has 32 bit int
s and long
s, 2147483648 is too big for either of those so it fails over to the long long
type that you observe.
相关文章