我的片段:
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位。
答案 0 :(得分:29)
与普遍看法相反,-2147483648 不一个字面值:C ++不支持负字面值。
实际上,它是编译时可评估的常量表达式,由 literal 2147483648的一元否定组成。
在具有32位int
和long
s的MSVC x64上,2147483648对于其中任何一个都太大了,因此它会故障转移到您观察到的long long
类型。 / p>