Skip to the content.

cpp lambda

为什么 cpp 要设计出来 lambda 来

闭包 = 函数 + 它捕获的词法环境

之所以叫 closure(闭包),是因为它把函数和它需要的变量”封闭”在了一起,形成一个自包含的整体。

由于 Lambda 可以捕获变量,所以相对比普通函数

每个实例有不同状态 不可以 可以 实际上,Lambda 在 C++11 以前就能通过手写 Functor 实现。

基本语法

基本格式:

[](argument1,argument2,.....)-> return_type {//code}

在 () 中传入参数,在 {} 中编写代码,[] 是一个捕获列表,可以指定外部作用域中,可以使用的局部变量:

  1. [] — 捕获列表为空,表示在 lambda 表达式中不能使用任何外部作用域的局部变量,只能使用传进去的参数。
  2. [=] — 表示按照值传递的方法捕获父作用域的所有变量。
  3. [&] — 表示按照引用传递的方法捕获父作用域的所有变量。
  4. [this] — 在成员函数中,按照值传递的方法捕获 this 指针。
  5. [a, &b] — 不建议直接使用 [=] 或 [&] 捕获所有变量,可以按需显式捕获,就是在 [] 指定变量名,[a] 表示值传递,[&b] 表示引用传递。
  6. [x = expr] 初始化捕获(C++14,可移动捕获)

  7. 在捕获中,没有 move 语义的问题

lambda : 2026-10-16

  1. 解决了什么问题?
  2. 各种捕获问题了
    • move 语义
    • 和 template 会不会有关系?
  3. 导致悬空引用 感觉很容易出现啊

对比

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。