Интересно, почему я могу использовать глобальные переменные (спасибо Крису Drew для коррекции меня) в lamdas и почему мне не нужно, чтобы захватить их:Доступ к переменным в лямбда без списка захвата
#include <iostream>
#include <vector>
using namespace std;
size_t i = 0;
vector<int> v = {1,2,3};
int main()
{
auto lambda = [](){i = v.size();};
lambda();
cout << i << endl;
return EXIT_SUCCESS;
}
В этом минимум рабочий пример Я обращаюсь к size_t и вектору, не захватывая их. Я должен был бы, если бы они были объявлены внутри основного метода. Почему это так и как я могу скопировать size_t и вектор? Я попытался использовать [=]
в качестве списка захвата, но он не копирует v
и i
.
они являются глобальными переменными –
Возможные Дубликат: [Lambda с пустым списком захвата все еще в состоянии захватить объекты из глобальной области?] (http://stackoverflow.com/questions/34398564/lambda-with-empty-capture-list-still-able-to-capture-objects-from-global-scope/34398671#34398671) – NathanOliver
Пожалуйста, будьте более конкретными, чем «не работает». Отправьте программу, которая «не работает», и объясните, что с ней не так. – molbdnilo