免责声明:我试图搜索类似的问题,但是这回复了每个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
}
Run Code Online (Sandbox Code Playgroud)
并将其转换为:
for (int i = 0; i < 5; ++i)
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
for在我看来,这个例子的优点是多重的:
我有一种倾向,因此不要使用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 */ }
Run Code Online (Sandbox Code Playgroud)
while当然,您可以使用a来执行此操作,但之后(1)和(2)将无法验证.
我想避免"主观"的评论("我喜欢/更好"的那种),我对参考现有的编码指南/编码标准非常感兴趣.
编辑:
我倾向于尽可能地坚持(1)和(2),(1)因为建议使用地点>> C++编码标准:项目18和(2)因为如果我不需要,它使维护更容易扫描整个循环以查找控制变量的可能更改(for当第3个表达式引用循环变量时,我认为这是理所当然的).
但是,gf如下所示,虽然有它的用途:
while (obj.advance()) {}
Run Code Online (Sandbox Code Playgroud)
请注意,这不是一种咆哮,while而是试图根据手头的情况找出哪一个while或for使用(并且出于合理的原因,而不仅仅是喜欢).
并非所有循环都用于迭代:
while(condition) // read e.g.: while condition holds
{
}
Run Code Online (Sandbox Code Playgroud)
没关系,虽然这感觉很难:
for(;condition;)
{
}
Run Code Online (Sandbox Code Playgroud)
您经常会看到任何输入源.
您可能还有隐式迭代:
while(obj.advance())
{
}
Run Code Online (Sandbox Code Playgroud)
再次,它似乎被迫与.
此外,当强迫for而不是while,人们往往滥用它:
for(A a(0); foo.valid(); b+=x); // a and b don't relate to loop-control
Run Code Online (Sandbox Code Playgroud)