gpt4 book ai didi

c++ - lambda 对象构建成本高吗?

转载 作者:行者123 更新时间:2023-11-30 00:44:07 29 4
gpt4 key购买 nike

出于某种目的,可以在经常被调用的函数中声明一个仿函数。构建仿函数的成本会很高吗,还是仅相当于定义一个普通结构?

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()

编辑更新了示例代码。

最佳答案

lambda 通常很便宜。

SomeType var;
auto lambda = [var](){ /* ... */ }

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

供您引用,显示的代码等同于:

SomeType var;
struct anonymous {
anonymous(SomeType st) : st(st) {}
void operator()() { /* .... */ }
private:
SomeType st;
} lambda(var);

关于c++ - lambda 对象构建成本高吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50346822/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com