繁体   English   中英

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

[英]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 由于func2func局部func ,因此当您从func返回时,此引用是悬空的。 因此,在main ,当在 lambda 的主体中调用func2时,您会得到未定义的行为。

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

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

这是一个演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM