我只是想知道我应该使用std::size_tfor循环和东西而不是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?
}
}Run Code Online (Sandbox Code Playgroud)
一般来说,何时使用的最佳做法是什么std::size_t?
我正在读别人的代码,他们分别在循环内增加for循环计数器,以及包括通常的事后想法.例如:
for( int y = 4; y < 12; y++ ) {
// blah
if( var < othervar ) {
y++;
}
// blah
}
Run Code Online (Sandbox Code Playgroud)
根据其他人编写和阅读的大部分代码,我应该期待看到这个吗?
是因为Pascal被设计成是这样,还是有任何权衡?
或者禁止或禁止修改for-block中的计数器有什么优缺点?恕我直言,没有什么用于修改for-block内的计数器.
编辑:
你能提供一个我们需要修改for-block内的计数器的例子吗?
这是很难 wallyk答案,并cartoonfox的答案之间作出选择,因为两者的答案是如此nice.Cartoonfox分析,从语言方面的问题,同时wallyk分析,从历史和现实世界aspect.Anyway的问题,所有的答案的感谢我要特别感谢wallyk.
可能重复:
为什么我们在循环中使用i作为计数器
我已经使用了这些超过15年,但不能真正记住我是如何/在哪里养成这种习惯的.由于它真的很普遍,我很想知道谁最初建议/推荐使用这些名称作为整数循环计数器(是K&R书吗?).
我们可以安全地使用浮点数作为循环计数器,并在每次迭代时按小数量递增/递减它们,就像下面看似无风险的程序一样吗?当然我知道使用浮点数作为==运算符的操作数是愚蠢的要做的事情.但是为了"正常"目的使用浮动作为其他比较操作的操作数有什么问题?通过"正常",我的意思是,即使浮点数可能不是数字的精确数字表示,但是不是0.000000001无关的变化,在大多数情况下可以忽略吗?(例如,在以下程序中甚至不明显)
但是说,这就是我的理解.假设表示不精确,5.0实际上是4.999999.因此,当我们在每次迭代时继续递减0.5时,与0的最后一次比较可能会变为假,并且循环可能会因为相差0.000001,不显示当前输出的最后一行.我希望你能得到我的漂移.我怎么了?
#include<stdio.h>
int main(void)
{
float f;
for(f=5.0;f>=0;f-=0.5)
printf("%f\n",f);
}
Run Code Online (Sandbox Code Playgroud)
输出:
5.000000
4.500000
4.000000
3.500000
3.000000
2.500000
2.000000
1.500000
1.000000
0.500000
0.000000
Run Code Online (Sandbox Code Playgroud) c floating-point loops loop-counter floating-point-precision