我在初始化值为-2147483648 的 vector 时发现了问题
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>
header ,或 std::numeric_limits<int>::min()
来自 <limits>
header ,假设您的意图是表达 int
的最小值.
关于c++ - 如何在 C++ 中用 -2147483648 初始化 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39803178/