Каждая переменная, явно названная в списке захвата, фиксируется.Захват по умолчанию захватывает только переменные, которые (а) не имеют явного имени в списке захвата и (b) использовали в теле лямбда-выражения.Если переменная не имеет явного имени и вы не используете переменную в лямбда-выражении, тогда переменная не фиксируется.В вашем примере my_huge_vector
не фиксируется.
По C ++ 11 §5.1.2 [expr.prim.lambda] / 11:
Если a Лямбда-выражение имеет связанный capture-default и его составной-оператор odr-использует this
или переменную с автоматическим продолжительностью хранения и odr-used сущность явно не захвачена, тогда говорят, что odr-used сущность считается неявно захваченной.
Ваше лямбда-выражение имеет связанный захватпо умолчанию: по умолчанию вы захватываете переменные по значению, используя [=]
.
Если и только если используется переменная (в смысле правила «Одно определение» термина «используется»), переменная неявно фиксируется.Поскольку вы не используете my_huge_vector
вообще в теле («составной оператор») лямбда-выражения, оно не фиксируется неявно.
Продолжение с §5.1.2 / 14
Объект захватывается копией, если
- неявно захвачен и capture-default равен
=
или - явно захвачен с захватом, который не включает
&
.
Поскольку ваш my_huge_vector
не захватывается неявным образом и не захватывается явно, он вообще не захватывается ни копией, ни ссылкой.