C ++ лямбда-захват по значению без объявления переменной ранее - PullRequest
2 голосов
/ 13 июня 2019

Глядя на пример на странице:

https://en.cppreference.com/w/cpp/algorithm/generate

Используется лямбда:

std::generate(v.begin(), v.end(), [n = 0] () mutable { return n++; });

переменная n ранее нигде не объявляласьк лямбде.

Попробовав этот фрагмент в MSVC 14 и GCC 9.1, он работает на обоих.

Попробуйте найти ссылку на это поведение по адресу:

https://en.cppreference.com/w/cpp/language/lambda

но нигде не может найти, где говорится, что новые переменные могут быть объявлены в области захвата лямбды.

Это ожидаемое поведение?Каковы ограничения, если это так?

1 Ответ

6 голосов
/ 13 июня 2019

В ссылке, на которую вы ссылаетесь, она находится в секции лямбда-захвата , номер позиции 3 в списке.

И далее (в разделе «начиная с C ++ 14»):

Захват с инициализатором действует так, как если бы он объявляет и явно захватывает переменную, объявленную с типом auto

[Выделение мое]

Что явно объясняет поведение этого предложения захвата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...