首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有理由跳过for循环的初始化?

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

Stack Overflow用户
提问于 2014-03-05 22:56:49
回答 2查看 1.5K关注 0票数 0

例如,

代码语言:javascript
复制
int i = 0;
for( ; i < 5; ++i )
{
    doStuff();
}

对比

代码语言:javascript
复制
for( int i = 0; i < 5; ++i )
{
    doStuff();
}

我唯一见过的第一个方法是要初始化的变量是一个真正长的名为迭代器的变量。有什么性能上的智慧可以让人更有益处吗?还是仅仅是选择和可读性?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-05 23:02:57

您可能这样做的一个原因是,在循环结束后,您需要知道迭代器/索引的值。对于您的示例来说,这是没有意义的,因为您知道值将是5,但有时您事先并不知道这一点。考虑:

代码语言:javascript
复制
int i = 0;
for(; isStillOkay(i); ++i )
{
  doStuff();
}

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

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

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

代码语言:javascript
复制
for (std::some::very_long<type>::name iterator_name = some_big_initializer;
     iterator_name < complicated && condition != iterator_name;
     ++iterator_name)
{
  // ...
}
票数 5
EN

Stack Overflow用户

发布于 2014-03-05 23:20:45

如果有充分的理由进行无限循环,则不需要初始化:

代码语言:javascript
复制
bool run(){
    for(;;){
        if(ERROR)
            break;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22211209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档