This question already has an answer here:
Does a C++11 range-based for loop condition get evaluated every cycle?
(1个答案)
7年前关闭。
给出以下C++ 11示例代码:
是否通过标准保证使得本示例中的
还是最终可能在循环的每次迭代中被调用?
在您的情况下,
(1个答案)
7年前关闭。
给出以下C++ 11示例代码:
for ( const auto &foo : bar() )
{
// ... do something with foo...
}
是否通过标准保证使得本示例中的
bar()
表达式仅被评估一次?还是最终可能在循环的每次迭代中被调用?
最佳答案
仅评估一次。该标准说基于范围的for循环与此等效:
§6.5.4基于范围的for语句[stmt.ranged]
{
auto && __range = range-init;
for ( auto __begin = begin-expr,
__end = end-expr;
__begin != __end;
++__begin ) {
for-range-declaration = *__begin;
statement
}
}
在您的情况下,
range-init
等于( bar() )
(您指定的表达式,用括号括起来)。如您所见,该表达式仅被评估一次。关于c++ - C++ 11基于范围的for()循环评估一次还是多次? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16259574/
10-10 08:04