На первый взгляд, разница в двух лямбдах ниже небольшая, во второй просто захватываем аргумент по ссылке:
Однако же выведутся разные значения: 100 0, так как первая лямбда скопирует i в момент создания, а не вызова. Вторая тоже "скопирует" ссылку в момент создания, но значение ссылки получит во время вызова.
Если же мы захотим изменить значение i, то в первую лямбду нужно добавить mutable, а для второй это делать необязательно:
#cpp #lambda
int i = 100;
auto f1 = [ i](){ return i; };
auto f2 = [&i](){ return i; };
i = 0;
std::cout << f1() << " " << f2() << std::endl;
Однако же выведутся разные значения: 100 0, так как первая лямбда скопирует i в момент создания, а не вызова. Вторая тоже "скопирует" ссылку в момент создания, но значение ссылки получит во время вызова.
Если же мы захотим изменить значение i, то в первую лямбду нужно добавить mutable, а для второй это делать необязательно:
auto f1 = [ i]() mutable { return ++i; };
auto f2 = [&i]() { return ++i; };#cpp #lambda
🔥4