何时使用 std::size_t?

新手上路,请多包涵

我只是想知道我应该使用 std::size_t 循环和其他东西而不是 int 吗?例如:

 #include <cstdint>

int main()
{
    for (std::size_t i = 0; i < 10; ++i) {
        // std::size_t OK here? Or should I use, say, unsigned int instead?
    }
}

一般来说,关于何时使用 std::size_t 的最佳实践是什么?

原文由 nhaa123 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 766
2 个回答

一个好的经验法则是,您需要在循环条件中与自然是 std::size_t 的东西进行比较。

std::size_t 是任何 sizeof 表达式的类型,并且保证能够表示 C++ 中任何对象(包括任何数组)的最大大小。通过扩展,它也保证对于任何数组索引都足够大,因此它是数组索引循环的自然类型。

如果您只是计算一个数字,那么使用包含该数字的变量类型或 intunsigned int (如果足够大)可能更自然这些应该是机器的自然尺寸。

原文由 CB Bailey 发布,翻译遵循 CC BY-SA 2.5 许可协议

通常最好不要在循环中使用 size_t。例如,

 vector<int> a = {1,2,3,4};
for (size_t i=0; i<a.size(); i++) {
    std::cout << a[i] << std::endl;
}
size_t n = a.size();
for (size_t i=n-1; i>=0; i--) {
    std::cout << a[i] << std::endl;
}

第一个循环没问题。但是对于第二个循环:

当 i=0 时, i– 的结果将是 ULLONG_MAX(假设 size_t = unsigned long long),这不是您在循环中想要的。

此外,如果 a 为空,则 n=0 且 n-1=ULLONG_MAX 也不好。

原文由 Yann 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题