Se captura cada variable nombrada expresamente en la lista de captura. La captura predeterminada solo capturará variables que son (a) no nombradas expresamente en la lista de captura y (b) utilizadas en el cuerpo de la expresión lambda. Si una variable no tiene un nombre expreso y no usa la variable en la expresión lambda, entonces la variable no se captura. En su ejemplo, my_huge_vector
no se captura.
Según C ++ 11 §5.1.2 [expr.prim.lambda] / 11:
Si una expresión lambda tiene un valor predeterminado de captura asociado y su enunciado compuesto odr-uses this
o una variable con duración de almacenamiento automática y la entidad odr-used no se captura explícitamente, entonces se dice que la entidad odr-used se captura implícitamente.
Su expresión lambda tiene un valor predeterminado de captura asociado: de forma predeterminada, captura variables por valor utilizando [=]
.
Si y solo si se usa una variable (en el sentido de la regla de una definición del término "usado") es una variable capturada implícitamente. Como no se usa my_huge_vector
en absoluto en el cuerpo (la "declaración compuesta") de la expresión lambda, no se captura implícitamente.
Para continuar con §5.1.2 / 14
Una entidad es capturada por copia si
- se captura implícitamente y el valor predeterminado de captura es
=
o si
- se captura explícitamente con una captura que no incluye un
&
.
Como su my_huge_vector
no se captura implícitamente y no se captura explícitamente, no se captura en absoluto, por copia o por referencia.