C++ lambda表达式捕获列表详解_C++值捕获与引用捕获的区别

admin 百科 16
值捕获复制变量,引用捕获共享变量;前者安全独立,后者实时同步但需防悬空引用。

C++ lambda表达式捕获列表详解_C++值捕获与引用捕获的区别-第1张图片-佛山资讯网

在C++中,lambda表达式是一种定义匿名函数的简洁方式,广泛用于STL算法、回调函数等场景。捕获列表(capture clause)是lambda表达式的重要组成部分,决定了lambda如何访问其定义作用域中的变量。理解值捕获与引用捕获的区别,对正确使用lambda至关重要。

捕获列表的基本语法

lambda表达式的完整形式如下:

[capture](parameters) -> return_type { body }

其中 capture 就是捕获列表,用来“捕获”外部作用域的变量,使其在lambda内部可用。常见的捕获方式包括:

  • []:不捕获任何变量
  • [=]:以值的方式捕获所有外部变量
  • [&]:以引用的方式捕获所有外部变量
  • [var]:值捕获特定变量
  • [&var]:引用捕获特定变量
  • [this]:捕获当前对象的指针
  • [=, &var]:混合捕获,值捕获为主,个别引用捕获
  • [&, var]:引用捕获为主,个别值捕获

值捕获 vs 引用捕获的区别

关键区别在于生命周期和数据同步:

立即学习“C++免费学习笔记(深入)”;

值捕获(by value)

标签: 回调函数 c++ 异步任务 区别 作用域

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~