3 回答
TA贡献1825条经验 获得超4个赞
一个好的经验法则是,您需要在循环条件下将其与自然存在的事物进行比较std::size_t
。
std::size_t
是任何sizeof
表达式的类型,并保证能够表达C ++中任何对象(包括任何数组)的最大大小。通过扩展,它也保证对于任何数组索引都足够大,因此它是数组上逐个索引循环的自然类型。
如果您只是在计算一个数字,那么使用保存该数字的变量类型或一个int
或unsigned int
(如果足够大)的类型可能会更自然,因为这些对于机器而言应该是自然大小。
TA贡献1851条经验 获得超4个赞
size_t
是sizeof
运算符的结果类型。
使用size_t
变量数组中的模型的大小或指数。size_t
传达了语义:您立即知道它代表一个以字节为单位的大小或一个索引,而不仅仅是另一个整数。
同样,使用size_t
字节表示大小有助于使代码具有可移植性。
TA贡献1863条经验 获得超2个赞
该size_t类型用于指定内容的大小,因此很自然地使用它,例如,获取字符串的长度然后处理每个字符:
for (size_t i = 0, max = strlen (str); i < max; i++)
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)。
- 3 回答
- 0 关注
- 1574 浏览
添加回答
举报