在 for-each 循环中使用 getter 是否效率低下?

Is using a getter in a for-each loop inefficient?

最近我在我的代码中做了以下事情:

for(auto& item : something.getSomeVector())

当我开始我的优化过程时,我开始怀疑这是否比下面的方法效率低:

std::vector<Type> vTypes = something.getSomeVector();
for(auto& item : vTypes)

for-each 循环会复制向量还是继续调用该函数?

谢谢!

基于范围的循环的定义是您的代码在一个块内扩展为与此非常相似的内容:

auto && __range = something.getSomeVector();
auto __begin = begin(__range);
auto __end = end(__range);

for (; __begin != __end; ++__begin)
{
    auto &item = *__begin;

因此,如您所见,它已经是最优的,您建议的改进甚至可能使事情变得更糟(如果函数通过引用返回,那么您在之前制作 none 的地方制作了一个副本)。