c++ - 如何在 C++ 中用 -2147483648 初始化 vector

标签 c++ vector

我在初始化值为-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/

相关文章:

python - 如何生成 3D 矢量网格? (3D网格中的每个位置都是一个向量)

c++ - 如何使用 C++ 生成器获取电子邮件正文

c++ - 字符串和 getline 字符

c++ - 访问 opencv 矩阵 CV_32S 元素

c++ - 为温度程序选择合适的值

vector - 在 Clojure 中添加向量的惯用方法是什么?

c++ - QSlider 增加 handle 尺寸

c++ - 将 Balanced BST 扩展到 C++ STL Map

c++ - 删除特定索引处的 vector 元素

arrays - swift 中的矢量对象