Cada variável expressamente nomeada na lista de captura é capturada. A captura padrão captura apenas variáveis que (a) não são expressamente nomeadas na lista de capturas e (b) usadas no corpo da expressão lambda. Se uma variável não for denominada expressamente e você não a usar na expressão lambda, a variável não será capturada. No seu exemplo, my_huge_vector
não é capturado.
Por C ++ 11 §5.1.2 [expr.prim.lambda] / 11:
Se uma expressão lambda tiver um padrão de captura associado e sua instrução composta odr-uses this
ou uma variável com duração automática de armazenamento e a entidade odr-used não for explicitamente capturada, então a entidade odr-used é capturada implicitamente.
Sua expressão lambda tem um padrão de captura associado: por padrão, você captura variáveis por valor usando o [=]
.
Se e somente se uma variável for usada (no sentido da Regra de Uma Definição do termo "usado") é uma variável capturada implicitamente. Como você não usa my_huge_vector
no corpo (a "declaração composta") da expressão lambda, ela não é capturada implicitamente.
Para continuar com §5.1.2 / 14
Uma entidade é capturada por cópia se
- é capturado implicitamente e o padrão de captura é
=
ou se
- é explicitamente capturado com uma captura que não inclui um
&
.
Como o seu my_huge_vector
não é capturado implicitamente e não é explicitamente capturado, ele não é capturado, por cópia ou por referência.