Why does MSVC pick a long long as the type for -2147483648?(为什么 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.
这篇关于为什么 MSVC 选择 long long 作为 -2147483648 的类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:为什么 MSVC 选择 long long 作为 -2147483648 的类型?


基础教程推荐
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 我有静态或动态 boost 库吗? 2021-01-01
- 常量变量在标题中不起作用 2021-01-01
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- 这个宏可以转换成函数吗? 2022-01-01
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
- 如何在 C++ 中初始化静态常量成员? 2022-01-01