С лямбда-выражениями в С++ 11 мы можем установить режим захвата по умолчанию по значению/по ссылке, например. [=]
/[&]
, за которыми могут следовать явные захваты, по ссылке/по значению, для некоторых переменных, например. [=,&this_is_by_ref]
или [&,this_is_by_value]
.
В С++ 14 у нас также может быть явный захват по ходу, например. [y = std::move(x)]
.
В Effective Modern C++, пункт 32, 3-й абзац, я прочитал
Единственное, что вы не можете выразить с помощью захвата инициализации, — это режим захвата по умолчанию, […]
Что, скорее всего, имеет в виду автор?
У нас уже есть способ захватить все необходимые нам переменные путем копирования или ссылки. Зачем нам выражать это с помощью формы x = y
?
Может быть, автор имеет в виду только взятие ходом по умолчанию? Что-то, что будет работать как [x = std::move(x), y = std::move(y), …]
со всеми перечисленными переменными, используемыми в теле?