c – 准则:而vs

前端之家收集整理的这篇文章主要介绍了c – 准则:而vs前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
免责声明:我试图搜索类似的问题,但这回复了每一个C问题……我也会感激任何可能提出更好标题的人.

C中有两个显着的循环结构:while和for.

>我故意忽略了do … while结构,它是无与伦比的
>我知道std :: for_each和BOOST_FOREACH,但不是每个循环都是一个

现在,我可能有点紧张,但它总是让我纠正这样的代码

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仅存在于循环范围内
> Pack:循环’控件’是打包的,所以只看循环声明我可以判断它是否正确形成(并将终止…),当然假设循环变量未在体内进一步修改
>它可能是内联的,但我不会总是建议它(这会产生棘手的错误)

我有一种倾向,因此不要使用while,除了可能是为了while(真)成语,但这不是我曾经使用过的一段时间(双关语).即使对于复杂的条件,我倾向于坚持使用for构造,尽管在多行上:

// I am also a fan of typedefs
for (const_iterator it = myVector.begin(),end = myVector.end();
     it != end && isValid(*it);
     ++it)
{ /* do stuff */ }

当然,你可以暂时这样做,但是(1)和(2)将无法验证.

我想避免“主观”的评论(“我喜欢/更好”的那种),我对参考现有的编码指南/编码标准非常感兴趣.

编辑:

我倾向于尽可能地坚持(1)和(2),(1)因为推荐了地点>> C++ Coding Standards: Item 18,以及(2)因为如果我不必扫描整个循环来寻找控制变量的可能改变(当第3个表达式引用循环变量时我使用for作为理所当然),它使维护更容易.

但是,如下面的gf所示,虽然有它的用途:

while (obj.advance()) {}

请注意,这不是一种咆哮,而是试图根据手头的情况(并且出于合理的原因,而不仅仅是喜欢)找到while或者使用中的哪一个.

解决方法

并非所有循环都用于迭代:
while(condition) // read e.g.: while condition holds
{
}

没关系,虽然这感觉很难:

for(;condition;)
{
}

您经常会看到任何输入源.

您可能还有隐式迭代:

while(obj.advance())
{
}

再次,它似乎被迫与.

此外,当强迫而不是一时,人们倾向于滥用它:

for(A a(0); foo.valid(); b+=x); // a and b don't relate to loop-control

猜你在找的C&C++相关文章