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)
编辑更新了示例代码.
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)