В чем разница между захватом ссылки и отправкой параметра по ссылке в лямбде (C ++) - PullRequest
0 голосов
/ 27 января 2020

Я довольно новичок в лямбдах и у меня возник вопрос ...

В чем разница между ними:
[&](const std::vector<int> &v)
[](const std::vector<int> &v, std::vector<Chrono *> &m_chronoSets;)
Мне нужно получить доступ и изменить m_chronoSets (это достигается путем захвата всего контекста с помощью [&]

с точки зрения времени (я полагаю, что первый может быть медленнее, если принять, что мы отправляем весь контекст по ссылке?) и оптимизация.

Спасибо.

1 Ответ

3 голосов
/ 27 января 2020

В [&](const std::vector<int> &v){...} любое внешнее значение, к которому имеет доступ лямбда, кроме v, фиксируется ссылкой внутри самой лямбды. Вызывающая сторона лямбды не должна знать или заботиться об этих значениях, она должна только передать vector<int> для аргумента v.

В [](const std::vector<int> &v, std::vector<Chrono *> &m_chronoSets){...}, ничего не захватывается внутри Сама лямбда, поэтому вызывающий лямбда должен явно передать vector<int> для аргумента v И передать std::vector<Chrono *> для аргумента m_chronoSets.

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