C ++ lambda,成员函数调用值比引用快

时间:2013-11-11 18:15:24

标签: c++ visual-studio-2012 c++11 lambda

为什么在lambda中通过值传递速度比传递速度快?通过参考的价值比每次快1-2%。

class Foo
{
private:
    int value;
public:
    Foo(int value) { this->value = value;  }

    std::function<int()> lambdaTestByValue();
    std::function<int()> lambdaTestByReference();
};

std::function<int ()> Foo::lambdaTestByValue()
{
    return [=]() { return value; };
}

std::function<int()> Foo::lambdaTestByReference()
{
    return [&]() { return value; };
}

在这种情况下,什么使参考更慢?这适用于或不适用。

1 个答案:

答案 0 :(得分:1)

假设您已正确分析并且这不是一个疯狂的追逐,请查看生成的代码的程序集差异,看看有什么区别。

它也可能是小对象优化,即如果状态在std :: function中足够小,它会将数据存储在对象本身中,如果捕获的函数较大,它将存储在堆上,这将需要间接和查找。