Возможно ли в синтаксисе С++ 11/14 написать лямбда-функцию, которая увидит родительские переменные?
в абстракции:
int i = 1;
auto go = [] () {
return i;
};
Можно ли сделать что-то подобное в современном синтаксисе С++?
Ответ 1
Формально говоря, способность доступа к окружающему контексту является ключевым различием между функцией (которая не может) и закрытием (которая может). В зависимости от языков этот захват среды может происходить посредством копирования или ссылки.
В С++ 11 (и далее) lambdas являются закрытиями и, как обычно, с С++, мы имеем мелкозернистый способ определения того, как выполняется захват:
копией: неявно [=]() { return i; } или явно [i]() { return i; }
по ссылке: неявно [&]() { return i; } или явно [&i]() { return i; }
и С++ 14 даже вводит обобщенные лямбда-захваты, поэтому вы можете захватить: