[英]Use ptrdiff_t or size_t for indexing
我養成了用size_t
而不是int
聲明for
循環索引的習慣。 但是,當我向后迭代數組時,這已經多次咬我,即檢查索引是否大於或等於零:
for (size_t i = n-1; i >= 0; i--) {
// ...
}
當 body 運行i == 0
時,它會遞減並回繞,可能是SIZE_T_MAX
。 這使得中斷條件成為重言式。 可能有一些巧妙的位操作來檢查可能的下溢,但使用ptrdiff_t
不是更簡單嗎?
解決此問題的正確慣用 C 方法是什么? size_t
加上有點玩弄或ptrdiff_t
並且對語義感到不舒服?
向后循環應如下所示:
for (size_t i = 0; i != n; ++i) {
arr[n - i - 1] = foo();
}
n - i - 1
是與i
對應的“反向迭代器”(如果可以的話)。
這是編寫向下循環的更安全的方法:
arr
被定義為一個數組,你也可以寫i = sizeof(arr) / sizeof(*arr)
。i
按降序獲取所有有效索引值。for (size_t i = n; i-- > 0;) {
arr[i] = compute_value(i);
}
可以將i --> 0
寫成吸引眼球的成語,但一些專家似乎不同意這種選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.