【发布时间】:2018-05-26 11:52:45
【问题描述】:
我正在尝试使用auto 来推断类型。
for (auto i = remaining_group.size() - 1; i >= 0; --i) {
std::cout << i;
}
我得到了非常大的数字,例如 18446744073709534800,这是意料之外的。当我将 auto 更改为 int 时,这是我期望的介于 0 和 39 之间的数字。
auto 会在这里失败吗?
remaining_group 的类型是 std::vector<lidar_point>,lidar_point 是类似结构:
struct LidarPoint {
float x;
float y;
float z;
uint8_t field1;
double field2;
uint8_t field3;
uint16_t field4;
}
【问题讨论】:
-
remainug_group是如何定义的?另外 - 也许大小是 0? -
size()返回什么类型? -
如果
size是无符号的,那么条件i >= 0总是为真,你最终会得到一个整数下溢。 -
写
size_t而不是auto只需要2个字符,但它带来的明确性非常值得