如何 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。
我是 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。