【发布时间】:2023-03-19 06:23:02
【问题描述】:
假设这个例子:
vector<int> get_vector();
for(auto& v: get_vector())
{
...
}
get_vector() 是否在每次迭代中重新评估?还是临时存储和评估一次?
【问题讨论】:
假设这个例子:
vector<int> get_vector();
for(auto& v: get_vector())
{
...
}
get_vector() 是否在每次迭代中重新评估?还是临时存储和评估一次?
【问题讨论】:
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())。
【讨论】:
auto && __range) 来延长生命周期的。