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 的类型?
基础教程推荐
- Windows Media Foundation 录制音频 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 从 std::cin 读取密码 2021-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07