2016-10-01 49 views
0

我与值-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发现这个问题。有谁知道为什么?

+1

-2147483648是邪恶的数字 – seccpur

回答

3

-2147483648是应用于整数文字2147483648的一元否定运算符。后者不适合int(假设它是32位),这意味着-2147483648实际上是unsigned类型的表达式。

现在,unsigned可以隐式转换为int(当值不可表示时,结果在技术上由实现定义,但通常不会令人惊奇)。然而,这是一个缩小的转换,与大括号初始化一起使用时禁止这种转换。

而是试图写入数值为文字,只需使用INT_MIN<limits.h>头,或std::numeric_limits<int>::min()<limits>头,假设你的目的是要表达一个int的最小值。