Вопрос о лямбде с ++ (с неавтоматической продолжительностью хранения) - PullRequest
0 голосов
/ 06 декабря 2018

Мой код выглядит следующим образом

#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;

Может кто-нибудь помочьмне разрешить это?

1 Ответ

0 голосов
/ 06 декабря 2018

Ваша лямбда фактически ничего не захватывает:

x - глобальная переменная (как std::cout).

Просто удалите захват:

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