Mỗi biến được đặt tên rõ ràng trong danh sách chụp được chụp. Việc chụp mặc định sẽ chỉ chụp các biến có cả (a) không được đặt tên rõ ràng trong danh sách chụp và (b) được sử dụng trong phần thân của biểu thức lambda. Nếu một biến không được đặt tên rõ ràng và bạn không sử dụng biến trong biểu thức lambda, thì biến đó không được ghi lại. Trong ví dụ của bạn, my_huge_vector
không được chụp.
Mỗi C ++ 11 §5.1.2 [expr.prim.lambda] / 11:
Nếu một biểu thức lambda có mặc định bắt giữ liên quan và sử dụng odr câu lệnh ghép của nó hoặc một biến có thời lượng lưu trữ tự động và thực thể sử dụng odr không được nắm bắt một cách rõ ràng, thì thực thể sử dụng odr được cho là bị bắt hoàn toàn. this
Biểu thức lambda của bạn có mặc định chụp liên quan: theo mặc định, bạn nắm bắt các biến theo giá trị bằng cách sử dụng [=]
.
Nếu và chỉ khi một biến được sử dụng (theo nghĩa Một quy tắc định nghĩa của thuật ngữ "được sử dụng") là một biến được nắm bắt hoàn toàn. Vì bạn hoàn toàn không sử dụng my_huge_vector
trong cơ thể ("tuyên bố ghép") của biểu thức lambda, nên nó không hoàn toàn bị bắt.
Tiếp tục với §5.1.2 / 14
Một thực thể được chụp bằng bản sao nếu
- nó được chụp ngầm và mặc định chụp là
=
hoặc nếu
- nó được chụp một cách rõ ràng với một bản chụp không bao gồm một
&
.
Vì bạn my_huge_vector
không hoàn toàn bị bắt và nó không bị bắt một cách rõ ràng, nên nó hoàn toàn không bị bắt, bởi bản sao hoặc bằng cách tham chiếu.