Chaque variable expressément nommé dans la liste de capture est capturé. La valeur par défaut capture capturer uniquement les variables qui sont à la fois (un) n'est pas expressément nommé dans la liste de capture et (b) utilisé dans le corps de la lambda expression. Si une variable n'est pas expressément nommé et vous n'avez pas utiliser la variable dans l'expression lambda, alors la variable n'est pas capturé. Dans votre exemple, my_huge_vector
n'est pas capturé.
Par C++11 §5.1.2[expr.prim.lambda]/11:
Si une lambda-expression est associée à une capture par défaut et ses composés-déclaration odr-utilise this
ou une variable de stockage automatique de la durée et de l' odr-utilisé entité n'est pas explicitement capturé, alors l' odr-utilisé entité est dit implicitement saisis.
Votre expression lambda est associé à une capture par défaut: par défaut, vous capturez des variables par valeur à l'aide de l' [=]
.
Si et seulement si une variable est utilisée (dans Une Définition de la Règle du sens du terme "utilisé") est une variable implicitement saisis. Puisque vous n'avez pas utiliser my_huge_vector
dans le corps (la "composé de déclaration") de l'expression lambda, il n'est pas implicitement saisis.
Pour continuer avec le §5.1.2/14
Une entité est capturé par copie si
- il est implicitement saisis et la capture par défaut est
=
ou si
- il est explicitement capturé avec une capture qui ne comprennent pas d'
&
.
Depuis votre my_huge_vector
n'est pas implicitement capturé et il n'est pas explicitement saisies, il n'est pas capturé, par copie ou par référence.