为什么MSVC会选择一个long long作为-2147483648的类型
Why does MSVC pick a long long as the type for -2147483648?
我的代码片段:
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位。
与流行的观点相反,-2147483648是而不是文字:C++不支持负文字值。
事实上,它是一个编译时可求值常量表达式,由文本214783648的一元否定组成。
在具有32位int
s和long
s的MSVC x64上,2147483648对这两种类型都太大,因此它会故障转移到您观察到的long long
类型。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 我有 3 个错误:期望一个")",期望一个表达式,long 类型的参数与 U32 类型的参数不兼容
- 为什么MSVC会选择一个long long作为-2147483648的类型
- 如何在Protobuf中声明一个无符号的long-long
- Rcpp,创建一个带有long long向量的数据帧
- 我怎样才能在不出错的情况下保存一个unsigned long
- 分割LPSTR并将值相加为一个long
- 奇怪的DllImport问题,当传递一个LONG参数内存损坏
- 一个如何实现string和long, int, double模板函数的建议
- 我如何使用3个重载函数(参数的差异是int, long, float)同时只要求一个输入项
- "long double"一个字的名字吗?
- 对于unsigned long使用true而不是true是不是一个坏习惯?