如何在C与-2147483648初始化向量++
问题描述:
我与值-2147483648如何在C与-2147483648初始化向量++
vector<int> vec1({-2147483648}); // invalid, error C2440
vector<int> vec2({0, -2147483648}); // invalid, error C2398
int a = -2147483648;
vector<int> vec3({t}); // valid
vector<int> vec4({0, t}); // valid
vector<int> vec5(1, -2147483648); // valid
初始化向量时,出现问题,当我使用VS2013发现这个问题。有谁知道为什么?
答
-2147483648
是应用于整数文字2147483648
的一元否定运算符。后者不适合int
(假设它是32位),这意味着-2147483648
实际上是unsigned
类型的表达式。
现在,unsigned
可以隐式转换为int
(当值不可表示时,结果在技术上由实现定义,但通常不会令人惊奇)。然而,这是一个缩小的转换,与大括号初始化一起使用时禁止这种转换。
而是试图写入数值为文字,只需使用INT_MIN
从<limits.h>
头,或std::numeric_limits<int>::min()
从<limits>
头,假设你的目的是要表达一个int
的最小值。
-2147483648是邪恶的数字 – seccpur