我应该在for循环中使用std :: size_t还是int?

我只是想知道我应该使用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?


慕村225694
浏览 1398回答 3
3回答

凤凰求蛊

一个好的经验法则是,您需要在循环条件下将其与自然存在的事物进行比较std::size_t。std::size_t是任何sizeof表达式的类型,并保证能够表达C ++中任何对象(包括任何数组)的最大大小。通过扩展,它也保证对于任何数组索引都足够大,因此它是数组上逐个索引循环的自然类型。如果您只是在计算一个数字,那么使用保存该数字的变量类型或一个int或unsigned int(如果足够大)的类型可能会更自然,因为这些对于机器而言应该是自然大小。

繁花不似锦

size_t是sizeof运算符的结果类型。使用size_t变量数组中的模型的大小或指数。size_t传达了语义:您立即知道它代表一个以字节为单位的大小或一个索引,而不仅仅是另一个整数。同样,使用size_t字节表示大小有助于使代码具有可移植性。

小唯快跑啊

该size_t类型用于指定内容的大小,因此很自然地使用它,例如,获取字符串的长度然后处理每个字符:for (size_t i = 0, max = strlen (str); i < max; i++)&nbsp; &nbsp; doSomethingWith (str[i]);你也必须注意,当然边界条件,因为它是一个无符号类型。顶端的边界通常并不那么重要,因为最大值通常很大(尽管有可能到达那里)。大多数人只是将an int用于此类事情,因为他们很少拥有足够大以超过该能力的结构或数组int。但是请注意以下事项:for (size_t i = strlen (str) - 1; i >= 0; i--)由于无符号值的包装行为,这将导致无限循环(尽管我已经看到编译器对此提出警告)。也可以通过以下方式缓解此问题(稍难理解,但至少可以避免包装问题):for (size_t i = strlen (str); i-- > 0; )通过将减量转换为延续条件的检查后副作用,这将对减量前的值进行连续性检查,但仍在循环内使用减量值(这就是循环从而len .. 1不是从处运行的原因len-1 .. 0)。
打开App,查看更多内容
随时随地看视频慕课网APP