相关疑难解决方法(0)

通过引用传递的 Lambda 在构造函数中调用时运行,但稍后存储在数据成员中时不会运行

以下 C++ 代码打印11.1然后崩溃。lambda 函数似乎在构造函数内被正确调用,但后来,相同的函数不再起作用!为什么会发生这种情况?lambda 的寿命有限制吗?

#include <functional>
#include <iostream>

class LambdaStore
{
public:
    LambdaStore(const std::function<void(float)>& _fn)
    : fn(_fn)
    {
        fn(11.1f);    // works
    }

    void ExecuteStoredLambda()
    {
        fn(99.9f);    // crashes
    }

private:
    const std::function<void(float)>& fn;
};

int main()
{
    LambdaStore lambdaStore([](float a) { std::cout << a << '\n'; });

    lambdaStore.ExecuteStoredLambda();
}
Run Code Online (Sandbox Code Playgroud)

c++ lambda lifetime c++11

43
推荐指数
4
解决办法
6361
查看次数

标签 统计

c++ ×1

c++11 ×1

lambda ×1

lifetime ×1