是否有理由跳过for循环的初始化?

时间:2014-03-05 22:56:49

标签: c++ performance for-loop

例如,

int i = 0;
for( ; i < 5; ++i )
{
    doStuff();
}

对战

for( int i = 0; i < 5; ++i )
{
    doStuff();
}

我唯一看到第一个方法的时候是要初始化的变量是一个非常长的命名迭代器。有什么表现明智可以使一个更有益吗?或者仅仅是选择和可读性?

2 个答案:

答案 0 :(得分:5)

您可能这样做的一个原因是因为您需要在循环结束后知道迭代器/索引的值。这对你的例子来说并没有多大意义,因为你知道它的值是5,但有时候你不会提前知道。考虑:

int i = 0;
for(; isStillOkay(i); ++i )
{
  doStuff();
}

// now we can use the final value of i for something

通常,您必须执行此操作的唯一原因是确保迭代器/索引在封闭范围内可用。如果您不需要,您所做的只是污染该范围。与往常一样,建议是为所有对象提供必要的最小范围。

如果您有长型,我建议您使用auto为您推断出类型。如果您没有C ++ 11支持,那么我建议使用以下格式:

for (std::some::very_long<type>::name iterator_name = some_big_initializer;
     iterator_name < complicated && condition != iterator_name;
     ++iterator_name)
{
  // ...
}

答案 1 :(得分:0)

当你有充分理由进行无限循环时,无需进行初始化:

bool run(){
    for(;;){
        if(ERROR)
            break;
    }
}