C++ lambda 中,成员函数按值调用比按引用调用更快
C++ lambda, member function call by value faster than by reference
为什么在 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; };
}
在这种情况下,是什么使引用变慢?这适用于优化或不优化。
假设您已经正确分析并且这不是一场野鹅追逐,请查看生成的代码的程序集差异,看看有什么不同。
它也可能是小对象优化,即如果 std::function 中的状态足够小,它将把数据存储在对象本身中,如果捕获的函数更大,它将存储在堆上,这将需要间接寻址和查找。
相关文章:
- 如何在 c# 代码中通过引用调用时从 c++ dll 更新数组值?
- 推理类型如何工作"auto"和按引用调用?
- C++ 通过引用调用函数
- 按引用调用与按指针参数调用的差异 前递增和后递增
- C++当您取消引用指向类对象的指针,然后将其作为引用返回时,是否可以对此引用调用方法
- 通过引用调用模板专用化
- 为什么通过带有文字编号的引用调用会出现"无匹配函数"错误?
- 按引用调用还是按值调用?
- 从 JS (V8) 中C++对象的引用调用函数
- 为什么要抛出引用调用复制构造函数的异常?
- 向量 - 通过引用 c++ 调用
- 为什么可以从常量引用调用析构函数
- 使用全局引用调用函数时访问冲突
- 引用调用在 c++ 中如何工作?
- 它不是编译.我正在调用一个通过引用调用的函数,但有一个错误,无法将双*转换为双倍
- C++函数调用 lambda obj,按值调用比按引用调用快
- 如何在 C++14 中编写用于调用 Fortran 函数的通用包装器(按引用调用 --按值调用>)
- 通过引用调用类对象的 2D 数组
- 构造函数参数中的引用调用引用的默认构造函数
- 如何在 main 中使用包含对节点的引用调用函数