キャプチャリストで明示的に指定された各変数がキャプチャされます。デフォルトのキャプチャでは、(a)キャプチャリストで明示的に指定されていない変数と(b)ラムダ式の本文で使用されている変数の両方がキャプチャされます。変数に明示的な名前が付けられておらず、ラムダ式で変数を使用しない場合、変数はキャプチャされません。あなたの例でmy_huge_vector
は、キャプチャされていません。
C ++ 11§5.1.2[expr.prim.lambda] / 11によると:
場合はラムダ式が関連付けられていキャプチャー・デフォルトおよびその化合物ステートメント ODR-用途 this
や自動記憶域期間とを備えた可変ODR-使用エンティティ明示的に捕獲されていないが、その後、ODR-使用エンティティは、暗黙的に取得されたと言われています。
ラムダ式には、関連付けられたキャプチャのデフォルトがあります。デフォルトでは、を使用して変数を値でキャプチャします[=]
。
変数が使用されている場合(「定義済み」という用語の「使用済み」という意味)は、暗黙的にキャプチャされた変数です。my_huge_vector
ラムダ式の本体(「複合ステートメント」)ではまったく使用しないため、暗黙的にキャプチャされません。
§5.1.2/ 14を続行するには
次の場合、エンティティはコピーによってキャプチャされます
- 暗黙的にキャプチャされ、capture-defaultは、
=
または
- を含まないキャプチャで明示的にキャプチャされ
&
ます。
あなた以来my_huge_vector
ISが暗黙的にキャプチャされませんし、それが明示的に捕獲されていない、それはコピーまたは参照で、すべてでキャプチャされていません。