【发布时间】:2013-07-17 22:52:54
【问题描述】:
在 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 循环,以便代码不会生成“未引用的局部变量”警告。
【问题讨论】:
-
为了澄清这一点,我的解释是 OP 正在尝试使用基于范围的 for 循环来做到这一点。但是,
for (auto x : boost::irange(0, 10)) f();之类的内容会发出警告,因为x未使用。 -
但是变量被引用(在循环条件下)。编译器绝对不应该对该代码发出警告。
-
@rodrigo:我不这么认为,循环条件使用了隐藏的迭代器。
x被写入但从未读取,导致编译器发出警告。 -
@MooingDuck
x<10;读取x? -
@Yakk:
for (auto x : boost::irange(0, 10))不包含表达式x<10。它包含一个更像auto x = *__secret_iterator1;的语句。