Lambda捕获列表用方括号指定外部变量访问方式:[=]默认值捕获、[&]默认引用捕获、[this]捕获当前对象指针、[*this](C++17)按值捕获整个对象,支持混合捕获如[=, &z]或[&, x],需注意生命周期与语义安全。
![C++中的Lambda捕获列表是什么?([=], [&], [this])-第1张图片-佛山资讯网 C++中的Lambda捕获列表是什么?([=], [&], [this])-第1张图片-佛山资讯网](https://www.fsgp.cn/zb_users/upload/2025/12/20251216190527176588312786009.png)
Lambda捕获列表是C++中定义lambda表达式时,用来指定如何访问外部作用域变量的语法部分,写在方括号[]里。它决定了lambda内部能否使用、以什么方式(值拷贝还是引用)使用周围函数里的变量。
捕获方式:[=](值捕获)
用[=]表示**默认按值捕获**所有在lambda体内被使用的外部变量。每个被捕获的变量都会在lambda创建时被拷贝一份,后续修改不影响原变量,lambda内部修改也不会影响外部。
注意:[=]不会捕获未被lambda体实际用到的变量;也不能捕获局部数组、未命名临时对象等不可拷贝类型(除非它们支持拷贝构造)。
- 如果想显式按值捕获某个变量,可写
[x, y](只捕获x和y) -
[=, &z]表示“其余按值,z按引用”——混合捕获允许微调
捕获方式:[&](引用捕获)
用[&]表示**默认按引用捕获**所有在lambda体内被使用的外部变量。lambda内部操作的是原始变量的别名,因此修改会直接影响外部变量。
立即学习“C++免费学习笔记(深入)”;
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~