[英]How to return a lambda function containing a function capture? (C++)
我是 C++ 中这个 Lambda 函数的新手。 我想返回一个包含函数捕获的 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()。 请让我知道如何解决这个问题,并告诉我该自动部分的实际格式。 提前致谢。
您从func
返回的 lambda :
return [&func2]() {
// ...
};
正在通过引用捕获func2
。 由于func2
是func
局部func
,因此当您从func
返回时,此引用是悬空的。 因此,在main
,当在 lambda 的主体中调用func2
时,您会得到未定义的行为。
您可以通过复制使 lambda 捕获func2
来解决此问题:
return [func2]() {
// ...
}
这是一个演示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.