我的代码如下
#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();
}