ตัวแปรแต่ละตัวที่ตั้งชื่ออย่างชัดแจ้งในรายการจับภาพจะถูกบันทึก การจับค่าเริ่มต้นจะจับเฉพาะตัวแปรที่ทั้งสอง (a) ไม่ได้ระบุชื่อไว้อย่างชัดเจนในรายการจับภาพและ (b) ใช้ในเนื้อความของนิพจน์แลมบ์ดา หากไม่ได้ตั้งชื่อตัวแปรแบบชัดแจ้งและคุณไม่ได้ใช้ตัวแปรในนิพจน์แลมบ์ดาตัวแปรนั้นจะไม่ถูกบันทึก ในตัวอย่างของคุณmy_huge_vector
ไม่ถูกบันทึก
ต่อ C ++ 11 §5.1.2 [expr.prim.lambda] / 11:
หากแลมบ์ดานิพจน์มีการจับค่าเริ่มต้นที่เกี่ยวข้องและการใช้คำสั่งผสมคำสั่ง odr this
หรือตัวแปรที่มีระยะเวลาการจัดเก็บอัตโนมัติและเอนทิตีที่ใช้คี่จะไม่ถูกจับอย่างชัดเจนเอนทิตีที่ใช้คี่จะถูกบันทึกโดยปริยาย
นิพจน์แลมบ์ดาของคุณมีค่าเริ่มต้นในการบันทึกที่เกี่ยวข้อง: โดยค่าเริ่มต้นคุณจะจับตัวแปรตามค่าโดยใช้[=]
.
ในกรณีที่มีการใช้ตัวแปร (ในความหมาย One Definition Rule ของคำว่า "used") เป็นตัวแปรที่จับโดยปริยาย เนื่องจากคุณไม่ได้ใช้my_huge_vector
เลยในร่างกาย ("คำสั่งประกอบ") ของนิพจน์แลมบ์ดาจึงไม่ถูกจับโดยปริยาย
เพื่อดำเนินการต่อด้วย§5.1.2 / 14
เอนทิตีถูกจับโดยสำเนา if
- มันถูกจับโดยปริยายและค่าเริ่มต้นของการบันทึกคือ
=
หรือถ้า
- มันถูกจับอย่างชัดเจนด้วยการจับภาพที่ไม่มี
&
ไฟล์.
เนื่องจากของคุณmy_huge_vector
ไม่ได้ถูกจับโดยปริยายและไม่ได้ถูกจับอย่างชัดเจนจึงไม่ถูกจับโดยการคัดลอกหรืออ้างอิง