(我已经阅读了What is the lifetime of lambda-derived implicit functors in C++?,它没有回答这个问题。)
我了解 C++ lambda 语法只是用于创建具有调用运算符和某些状态的匿名类的实例的糖,并且我了解该状态的生命周期要求(取决于您是否通过引用的值捕获。)但是 lambda 对象本身的生命周期是多少?在以下示例中,返回的 std::function
实例是否有用?
std::function<int(int)> meta_add(int x) {
auto add = [x](int y) { return x + y; };
return add;
}
如果是,它是如何工作的?这对我来说似乎有点太神奇了——我只能想象它通过 std::function
复制我的整个实例来工作,根据我捕获的内容,这可能非常重——过去我已经std::function
主要与裸函数指针一起使用,并且复制它们很快。鉴于 std::function
的类型删除,这似乎也有问题。
最佳答案
生命周期与将 lambda 替换为手动仿函数的情况完全相同:
struct lambda {
lambda(int x) : x(x) { }
int operator ()(int y) { return x + y; }
private:
int x;
};
std::function<int(int)> meta_add(int x) {
lambda add(x);
return add;
}
对象将被创建,对 meta_add
函数是本地的,然后将 [in its entirty, including the value of x
] 移动到返回值中,然后是本地实例将超出范围并正常销毁。但是,只要 std::function
对象保存它,从函数返回的对象将保持有效。这显然取决于调用上下文。
关于c++ - C++ lambda 表达式的生命周期是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7941562/