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