Кожна змінна, прямо вказана у списку захоплення, фіксується. Захоплення за замовчуванням охоплює лише змінні, які обидві (а) не названі прямо у списку захоплення та (b), що використовуються в тілі виразу лямбда. Якщо змінна не має прямого імені, і ви не використовуєте змінну в лямбда-виразі, то змінна не фіксується. У вашому прикладі my_huge_vector
не захоплено.
За C ++ 11 §5.1.2 [expr.prim.lambda] / 11:
Якщо лямбда-вираз має асоційований за замовчуванням захоплення, а його з'єднання-оператор odr-use this
або змінна з автоматичною тривалістю зберігання, а об'єкт, що використовується odr , не чітко зафіксований, тоді говорять, що використовується odr, називається суттєво захопленим.
Ваш лямбда-вираз має пов'язаний за замовчуванням захоплення: за замовчуванням ви захоплюєте змінні за значенням, використовуючи [=]
.
Якщо і лише якщо використовується змінна (у розумінні Правила одного визначення терміна "використовується"), це змінна фіксація неявно. Оскільки ви не використовуєте my_huge_vector
зовсім в тілі ("складене твердження") лямбда-виразу, він неявно фіксується.
Продовжувати §5.1.2 / 14
Суб'єкт охоплюється копією, якщо
- він неявно фіксується, а за замовчуванням вловлювач є
=
або, якщо
- він явно захоплюється захопленням, що не включає в себе
&
.
Оскільки ваш файл my_huge_vector
не зафіксовано неявно і не є чітко зафіксованим, він не захоплюється взагалі, копією чи посиланням.