&i
signifie seulement i
est capturé comme référence, tandis que &
signifie que toutes les variables qui sont utilisées dans le lambda, sont capturées à partir de la portée.
int i = 0, j = 10;
[&i]{ i++; j++;}(); //error: j is not captured by reference
[&]{ i++; j++;}(); //ok: both variables are captured by reference
Le site &i
L'approche est fournie par la langue pour limite la quantité de variables capturées. C++ vous offre un contrôle total sur les variables capturées, comme par exemple sur les variables suivantes spécifique les variables à capturer, comment les capturer (par valeur, ou par référence).
Même raisonnement avec i
et =
:
int i = 0, j = 10;
[i]{ i++; j++;}(); //error: j is not captured (only i is captured by value)
[=]{ i++; j++;}(); //ok: both variables are captured by value
//more
[&i, j]{ i++; j++;}(); //ok: captured i by reference, j by value
J'espère que cela vous aidera.