C 11 基于范围的 for 循环,没有循环变量

新手上路,请多包涵

在 C++ 中,我需要迭代一定次数,但我不需要迭代变量。例如:

 for( int x=0; x<10; ++x ) {
    /* code goes here, i do not reference "x" in this code */
}

我意识到我可以通过用 lambda 或命名函数替换“代码到这里”来做到这一点,但这个问题专门针对 for 循环。

我希望 C++11 基于范围的 for 循环会有所帮助:

 for( auto x : boost::irange(0,10) ) {
    /* code goes here, i do not reference "x" in this code */
}

但上面给出了一个“未引用的局部变量”,因为我从未明确引用 x。

我想知道是否有一种更优雅的方式来编写上述 for 循环,以便代码不会生成“未引用的局部变量”警告。

原文由 nonagon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 386
2 个回答

可能有办法做到这一点,但我 非常 怀疑它会更优雅。您在第一个循环中所拥有的已经是正确的方法,限制了循环变量的范围/生命周期。

我会简单地忽略未使用的变量警告(毕竟这只是编译器表示 可能 有问题的迹象)或使用编译器工具(如果可用)在那个时候简单地关闭警告。

这可能通过某种 #pragma 来实现,具体取决于您的环境,或者某些实现允许您执行以下操作:

 for (int x = 0; x < 10; ++x) {
    (void)x;

    // Other code goes here, that does not reference "x".
}

我已经看到 void 技巧用于函数体中未使用的参数。

原文由 paxdiablo 发布,翻译遵循 CC BY-SA 3.0 许可协议

现在进行 编辑,声明的循环变量减少了 100%。

 template <typename F>
void repeat(unsigned n, F f) {
    while (n--) f();
}

将其用作:

 repeat(10, f);

或者

repeat(10, [] { f(); });

或者

int g(int);
repeat(10, std::bind(g, 42));

http://ideone.com/4k83TJ 现场 观看

原文由 sehe 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题