Setiap variabel yang secara jelas dinamai dalam daftar tangkapan ditangkap. Tangkapan default hanya akan menangkap variabel yang (a) tidak dinamai secara jelas dalam daftar tangkapan dan (b) digunakan dalam isi ekspresi lambda. Jika sebuah variabel tidak dinamai secara jelas dan Anda tidak menggunakan variabel dalam ekspresi lambda, maka variabel tersebut tidak ditangkap. Dalam contoh Anda, my_huge_vector
tidak ditangkap.
Per C ++ 11 §5.1.2 [expr.prim.lambda] / 11:
Jika ekspresi lambda memiliki default capture terkait dan pernyataan majemuk odr-use this
atau variabel dengan durasi penyimpanan otomatis dan entitas yang digunakan odr tidak secara eksplisit ditangkap, maka entitas yang digunakan odr dikatakan ditangkap secara implisit.
Ekspresi lambda Anda memiliki default pengambilan terkait: secara default, Anda menangkap variabel dengan nilai menggunakan [=]
.
Jika dan hanya jika variabel yang digunakan (dalam pengertian Aturan Satu Definisi dari istilah "digunakan") adalah variabel yang ditangkap secara implisit. Karena Anda tidak menggunakan my_huge_vector
sama sekali dalam body ("pernyataan gabungan") ekspresi lambda, ekspresi lambda tidak ditangkap secara implisit.
Untuk melanjutkan dengan §5.1.2 / 14
Entitas ditangkap dengan salinan jika
- itu secara implisit ditangkap dan capture-defaultnya adalah
=
atau jika
- itu secara eksplisit ditangkap dengan tangkapan yang tidak menyertakan file
&
.
Karena Anda my_huge_vector
tidak ditangkap secara implisit dan tidak ditangkap secara eksplisit, maka tidak diambil sama sekali, dengan menyalin atau dengan referensi.