如何 return 包含函数捕获的 lambda 函数? (C++)

How to return a lambda function containing a function capture? (C++)

我是 C++ 中的 Lambda 函数的新手。我想 return 一个包含函数捕获的 lambda 函数,如下所示:

#include<bits/stdc++.h>

//typedef void(*func1)();

auto func(void(*func2)())
{
    return [&func2](){cout<<"hello world 1"<<endl;func2();};
}

void func2()
{
    cout<<"hello world 2"<<endl;
}


int main()
{

    func(func2)();


    return 0;
}

但是此代码段在执行时以非零数字退出。此外,不执行 func2()。 请让我知道如何解决这个问题,并告诉我该自动部分的实际格式。 提前致谢。

您 return 来自 func 的 lambda:

return [&func2]() {
  // ...
};

正在通过引用捕获 func2。由于 func2 对于 func 是本地的,因此当您从 func return 时,该引用是悬空的。所以在 main 中,当在 lambda 的主体中调用 func2 时,你会得到未定义的行为。

您可以通过复制 lambda 捕获 func2 来解决此问题:

return [func2]() {
  // ...
}

这是一个 demo