首页 > 解决方案 > 向量大小自动失败

问题描述

我正在尝试使用auto来推断类型。

for (auto i = remaining_group.size() - 1; i >= 0; --i) {
    std::cout << i;
}

我得到了非常大的数字,例如 18446744073709534800,这是意料之外的。当我更改autoint它时,我期望的数字在 0 到 39 之间。

有什么理由auto会在这里失败吗?

remaining_group的类型是 astd::vector<lidar_point>并且lidar_point结构如下:

struct LidarPoint {
  float x;
  float y;
  float z;
  uint8_t field1;
  double field2;
  uint8_t field3;
  uint16_t field4;
}

标签: c++c++11vectorauto

解决方案


当使用auto的类型istd::vector::size_type,它是一个无符号整数类型。这意味着条件i >= 0;总是true,如果发生溢出,你会得到一些大数字。

无符号整数运算始终以 2 n为模执行 ,其中 n 是该特定整数中的位数。例如 for unsigned int,给UINT_MAX给加一​0,从 <code>0 中减一给UINT_MAX


推荐阅读