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

Moo*_*her 2 c++ optimization foreach for-loop c++11

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

for(auto& item : something.getSomeVector())
Run Code Online (Sandbox Code Playgroud)

当我开始我的优化传递时,我开始怀疑这是否比以下内容更低效:

std::vector<Type> vTypes = something.getSomeVector();
for(auto& item : vTypes)
Run Code Online (Sandbox Code Playgroud)

将一个for-each循环复制载体或只保留调用该函数?

谢谢!

M.M*_*M.M 8

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

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

for (; __begin != __end; ++__begin)
{
    auto &item = *__begin;
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它已经是最优的,您建议的改进甚至可能使事情变得更糟(如果通过引用返回的函数然后您创建了以前没有创建的副本).