如何在c++中使用-2147483648初始化向量

How to initialize a vector with -2147483648 in C++

本文关键字:-2147483648 初始化 向量 c++      更新时间:2023-10-16

我在初始化值为-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的最小值,而不是尝试将值写入文字,只需使用<limits.h>头中的INT_MIN<limits>头中的std::numeric_limits<int>::min()