基于范围的for循环如何处理临时容器

时间:2015-02-19 15:34:18

标签: c++ c++11

假设这个例子:

vector<int> get_vector();
for(auto& v: get_vector())
{
 ...
}

每次迭代都会重新评估get_vector()吗?或者临时存储和评估一次?

1 个答案:

答案 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())