为什么在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; };
}
在这种情况下,什么使参考更慢?这适用于或不适用。
答案 0 :(得分:1)
假设您已正确分析并且这不是一个疯狂的追逐,请查看生成的代码的程序集差异,看看有什么区别。
它也可能是小对象优化,即如果状态在std :: function中足够小,它会将数据存储在对象本身中,如果捕获的函数较大,它将存储在堆上,这将需要间接和查找。