lambda对象的构建成本是否很高?

heL*_*maN 1 c++ performance lambda

出于某种目的,可以在频繁的被调用者函数中声明一个仿函数.算子的构造是否会花费很多,或者只是与定义一个简单的结构相当?

void f() {
    static int x = 0;
    auto a = [&](){ x += 1;};
    for (auto i = 0, i < 10; ++i) {
        a();
    }
}

// somewhere else call f thousands of times
f()
Run Code Online (Sandbox Code Playgroud)

编辑更新了示例代码.

YSC*_*YSC 5

lambda通常很便宜.

SomeType var;
auto lambda = [var](){ /* ... */ }
Run Code Online (Sandbox Code Playgroud)

这里,lambda只是一个匿名类型的实例.类型本身在编译时处理,所以不用担心.在运行时发生的是捕获变量(这里var).捕获按值完成时,值本身将复制到lambda实例中.这就是成本.当通过引用完成捕获时,引用被复制到lambda中,这很便宜.

为了您的信息,显示的代码相当于:

SomeType var;
struct anonymous {
    anonymous(SomeType st) : st(st) {}
    void operator()() { /* .... */ }
private:
    SomeType st;
} lambda(var);
Run Code Online (Sandbox Code Playgroud)