Yakalama listesinde açıkça adlandırılan her değişken yakalanır. Varsayılan yakalama yalnızca (a) yakalama listesinde açıkça adlandırılmayan ve (b) lambda ifadesinin gövdesinde kullanılan değişkenleri yakalar . Değişken açıkça adlandırılmamışsa ve değişkeni lambda ifadesinde kullanmıyorsanız, değişken yakalanmaz. Örnekte, my_huge_vector
çekilmemiş.
C ++ 11 §5.1.2 [expr.prim.lambda] / 11 uyarınca:
Bir lambda ifadesinin ilişkili bir yakalama varsayılanı ve bileşik ifadesi odr kullanımları this
veya otomatik depolama süresi olan bir değişkeni varsa ve odr kullanılan varlık açıkça yakalanmazsa, odr kullanılan varlığın örtük olarak yakalandığı söylenir.
Lambda ifadenizin ilişkili bir yakalama varsayılanı vardır: varsayılan olarak, değişkenleri değere göre yakalarsınız [=]
.
Yalnızca ve ancak bir değişken kullanılırsa ("kullanılmış" teriminin Tek Tanım Kuralı anlamında) örtük olarak yakalanan bir değişkendir. my_huge_vector
Lambda ifadesinin gövdesinde ("bileşik ifade") hiç kullanmadığınız için, dolaylı olarak yakalanmaz.
§5.1.2 / 14 ile devam etmek için
Bir varlık kopya ile yakalanırsa
- örtük yakalanır ve yakalama varsayılan olup
=
olmadığını veya
- açık bir şekilde bir
&
.
Sizin my_huge_vector
, dolaylı olarak yakalanmadığından ve açıkça yakalanmadığından, kopya veya referans yoluyla hiç yakalanmaz.