使用ptrdiff_t或size_t进行索引

时间:2014-05-31 15:02:39

标签: c indexing size-t

我养成了使用for而不是size_t声明int循环索引的习惯。然而,当我向后迭代一个数组时,这已经多次出价,即检查索引是否大于或等于零:

for (size_t i = n-1; i >= 0; i--) {
    // ...
}

当身体为i == 0运行时,它会减少并包裹,可能是SIZE_T_MAX。这使得休息条件成为同义反复。可能会有一些聪明的位操作来检查可能的下溢,但使用ptrdiff_t代替它会不会更简单?

解决这个问题的正确方法是什么? size_t加上一点点or或ptrdiff_t并对语义感到不舒服?

1 个答案:

答案 0 :(得分:0)

向后循环应如下所示:

for (size_t i = 0; i != n; ++i) {
    arr[n - i - 1] = foo();
}

如果愿意,n - i - 1是与i对应的“反向迭代器”。