关于c++lambda(具有非自动存储持续时间)的问题



我的代码如下

#include <iostream>
#include <string>
using namespace std;
int x;
struct A
{
auto func()
{
auto test([&, &x](){cout << x << endl;});
test();
}
};
int main()
{
A a;
x = 5;
a.func();
}

我的程序如上所述,我用以下命令编译了它

g++ -std=c++11 ex.cpp -o ex

然而,我收到了以下的警告

ex.cpp:在成员函数"auto A::func(("中:
ex.cpp:11:19:警告:捕获具有非自动存储持续时间的变量"x">
auto test([&, &x](){cout << x << endl;});
^
ex.cpp:6:5:注意:此处声明的"int x">
int x;

有人能帮我解决吗?

您的lambda实际上没有捕获任何内容:

x是全局变量(如std::cout(。

只需移除捕获:

auto func()
{
auto test([](){ std::cout << x << std::endl; });
test();
}

相关内容

  • 没有找到相关文章

最新更新