为什么MSVC会选择一个long long作为-2147483648的类型

Why does MSVC pick a long long as the type for -2147483648?

本文关键字:long 一个 作为 -2147483648 类型 MSVC 选择 为什么      更新时间:2023-10-16

我的代码片段:

auto i = -2147483648;
int j = 3;
std::swap(i, j); // Compile error about mismatched types here. 

编译器声明文字ilong long。为什么-2147483648适用于MSVC x64上的int

我的编译器是MSVC,目标是64位。

与流行的观点相反,-2147483648是而不是文字:C++不支持负文字值。

事实上,它是一个编译时可求值常量表达式,由文本214783648的一元否定组成。

在具有32位int s和long s的MSVC x64上,2147483648对这两种类型都太大,因此它会故障转移到您观察到的long long类型。