问题描述
我的代码段:
auto i = -2147483648;
int j = 3;
std::swap(i, j); // Compile error about mismatched types here.
编译器声明文字 i
为长长
。这是为什么? -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.
实际上,它是一个编译时可评估的常量表达式,由 literal 的一元否定组成2147483648。
It is, in fact, a compile-time evaluable constant expression consisting of a unary negation of the literal 2147483648.
在MSVC x64上,它具有32位 int
s和 long
s,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.
这篇关于为什么MSVC会选择很长的时间作为-2147483648的类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!