小工具知识网

当前位置: 首页 > 行业知识 > 深入浅出 C++ Lambda表达式:语法、特点和应用

行业知识

深入浅出 C++ Lambda表达式:语法、特点和应用

2026-11-03 08:06:57 来源:互联网转载

C++ Lambda表达式介绍


在本文中,我们将介绍 c++ Lambda表达式的定义、用法和特点,以及它与普通函数和普通类的关系。通过多个例子,展示了 Lambda表达式的参数、返回值、捕获、引用、修改等方式,以及如何用它们定义匿名函数和算法。

什么是 Lambda表达式

Lambda表达式是一种在被调用的位置或作为参数传递给函数的位置定义匿名函数对象(闭包)的简便方法。Lambda表达式的基本语法如下:

[capture list] (parameter list) -> return type { function body }

其中:

  • capture list 是捕获列表,用于指定 Lambda表达式可以访问的外部变量,以及是按值还是按引用的方式访问。捕获列表可以为空,表示不访问任何外部变量,也可以使用默认捕获模式 & 或 = 来表示按引用或按值捕获所有外部变量,还可以混合使用具体的变量名和默认捕获模式来指定不同的捕获方式。
  • parameter list 是参数列表,用于表示 Lambda表达式的参数,可以为空,表示没有参数,也可以和普通函数一样指定参数的类型和名称,还可以在 c++14 中使用 auto 关键字来实现泛型参数。
  • return type 是返回值类型,用于指定 Lambda表达式的返回值类型,可以省略,表示由编译器根据函数体推导,也可以使用 -> 符号显式指定,还可以在 c++14 中使用 auto 关键字来实现泛型返回值。
  • function body 是函数体,用于表示 Lambda表达式的具体逻辑,可以是一条语句,也可以是多条语句,还可以在 c++14 中使用 constexpr 来实现编译期计算。

    Lambda表达式的捕获方式

    • 值捕获(capture by value):在捕获列表中使用变量名,表示将该变量的值拷贝到 Lambda 表达式中,作为一个数据成员。值捕获的变量在 Lambda 表达式定义时就已经确定,不会随着外部变量的变化而变化。值捕获的变量默认不能在 Lambda 表达式中修改,除非使用 mutable 关键字。例如:

      int x = 10;auto f = [x] (int y) -> int { return x + y; }; // 值捕获 xx = 20; // 修改外部的 xcout  return x + y; }; // 引用捕获 xx = 20; // 修改外部的 xcout  return x + y + z; }; // 隐式按值捕获 x,显式按引用捕获 yx = 30; // 修改外部的 xy = 40; // 修改外部的 ycout  return z + y; }; // 初始化捕获 z,相当于值捕获 x + 5x = 20; // 修改外部的 xcout     // 定义一个 Lambda表达式,计算两个数的和    auto plus = [] (int a, int b) - int { return a + b; };    // 调用 Lambda表达式    cout  return n % 2 == 1; };    // 调用 Lambda表达式    cout     int x = 10;    int y = 20;    // 定义一个 Lambda表达式,按值捕获 x 和 y    auto add = [x, y] () - int { return x + y; };    // 调用 Lambda表达式    cout  return x * y; };    // 调用 Lambda表达式    cout     Item(int aa, int bb) : a(aa), b(bb) {}    int a;    int b;};int main(){    vector return v1.a 

上一篇:半成品服务器怎么选好的?

下一篇:squad怎么找到中国服务器?