关于C ++ Lambda的问题(具有非自动存储期限)

时间:2018-12-06 03:53:19

标签: c++ lambda storage duration

我的代码如下

#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:在成员函数“自动A :: func()”中:
  例如:cpp:11:19:警告:捕获具有非自动存储期限的变量“ x”
  auto test([&, &x](){cout << x << endl;});
  ^
  例如:cpp:6:5:注意:在此处声明了“ int x”
  int x;

有人可以帮我解决吗?

1 个答案:

答案 0 :(得分:0)

您的lambda实际上没有捕获任何东西:

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

只需删除捕获:

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