c++ - 向量大小自动失败
问题描述
我正在尝试使用auto
来推断类型。
for (auto i = remaining_group.size() - 1; i >= 0; --i) {
std::cout << i;
}
我得到了非常大的数字,例如 18446744073709534800,这是意料之外的。当我更改auto
为int
它时,我期望的数字在 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;
}
解决方案
当使用auto
的类型i
是std::vector::size_type
,它是一个无符号整数类型。这意味着条件i >= 0;
总是true
,如果发生溢出,你会得到一些大数字。
无符号整数运算始终以 2 n为模执行 ,其中 n 是该特定整数中的位数。例如 for
unsigned int
,给UINT_MAX
给加一0
,从 <code>0 中减一给UINT_MAX
。
推荐阅读
- javascript - 在特定单词之后从字符串中获取子字符串(脚本命令:java 中的单独输入和输出)
- asp.net - 从 View 调用 ViewModel 方法或寻找其他选项
- sql - 如何使用 case when 和 distinct count 计算平均值?
- angular - NullInjectorError: R3InjectorError()[方向性]
- node.js - 有没有办法将类应用于 Sequelize 模型中的 JSON 属性?
- deep-learning - pytorch中conv2d层的可学习参数问题
- ruby - 为不需要的 gropus 跳过捆绑器身份验证
- java - 不向下转换的使用方法
- groovy - 在 Apache JMeter 中发送带有多个附件的电子邮件的 GROOVY 脚本
- azure - 如何在二头肌模板中定义基于身份的数据访问