免责声明:我尝试搜索了类似的问题,但是这返回了每个C++问题...同时我会感激任何能够建议更好标题的人。
C++中有两种著名的循环结构:while
和for
。
- 我故意忽略了
do ... while
结构,它有点无与伦比 - 我知道
std::for_each
和BOOST_FOREACH
,但并不是每个循环都是for each
现在,我可能有点紧张,但总是让我想要“纠正”像这样的代码:
int i = 0;
while ( i < 5)
{
// do stuff
++i; // I'm kind and use prefix notation... though I usually witness postfix
}
并将其转换为:
for (int i = 0; i < 5; ++i)
{
// do stuff
}
在我看来,这个例子中使用
for
的优点有很多:
- 局部性:变量i仅存在于循环的作用域中。
- 紧凑性:循环的“控制”被打包了,因此只需查看循环声明即可确定其是否正确形成(并将终止…),当然假设循环变量在循环体内未被修改。
- 它可以被内联,但我不总是建议这样做(会导致棘手的错误)。
因此,我倾向于不使用while
,除非是while(true)
惯用语,但我已经有一段时间没有使用过了。即使对于复杂的条件,我也倾向于使用for
结构,尽管跨越多行:
// I am also a fan of typedefs
for (const_iterator it = myVector.begin(), end = myVector.end();
it != end && isValid(*it);
++it)
{ /* do stuff */ }
您当然可以使用
while
来完成这个任务,但是这样就无法验证(1)和(2)。 我希望避免使用“主观”言论(例如“I like for/while better”之类的言论),我肯定对现有编码指南/编码标准的引用感兴趣。 编辑: 我倾向于尽可能坚持(1)和(2),(1)因为推荐使用局部变量>> C ++代码规范:项目18,(2)因为如果我不必扫描整个循环体以查找控制变量的可能变更,那么维护将更容易( 在第3个表达式引用循环变量时使用for
时我认为这是理所当然的)。 然而,如下所示,gf
表明while确实有其用途:while (obj.advance()) {}
请注意,这不是针对
while
的抱怨,而是试图找出在特定情况下应该使用 while
还是 for
的方法(有充分的理由而不仅仅是喜好)。
for i := 1 step 2 until N do
。但在C中,编译器必须跳过额外的数据流分析障碍才能确定这是您的意图。 - bendin