假设这个例子:
vector<int> get_vector();
for(auto& v: get_vector())
{
...
}
每次迭代都会重新评估get_vector()
吗?或者临时存储和评估一次?
答案 0 :(得分:6)
get_vector()
评估一次,结果存储在临时。
6.5.4 / 1 ...基于范围的for语句等同于
{ auto && __range = range-init; for ( auto __begin = begin-expr, __end = end-expr; __begin != __end; ++__begin ) { for-range-declaration = *__begin; statement } }
在您的示例中,range-init
为(get_vector())
。