21xrx.com
2024-11-05 14:40:22 Tuesday
登录
文章检索 我的文章 写文章
C++中的lambda表达式
2023-07-07 16:06:22 深夜i     --     --
C++ lambda表达式 匿名函数 函数对象 闭包函数

在C++11及其后续的标准中,引入了lambda表达式的概念,使得C++语言的代码编写变得更加简便和灵活。lambda表达式是一种匿名函数,可以在调用时直接定义,不需要像函数一样提前声明。

lambda表达式以方括号([])开始,接着是形参列表,然后是可选的mutable修饰符和异常规范,最后是函数体。例如:

[/* 形参列表 */](/* mutable修饰符 */){/* 函数体 */}

形参列表中可以定义参数,并在函数体中使用,也可以为空。函数体中可以使用表达式和语句,返回值类型由编译器自动确定。如果指定了返回类型,可以使用“->”符号,例如:

[/* 形参列表 */](/* mutable修饰符 */)->/* 返回类型 */{/* 函数体 */}

在使用lambda表达式时,可以像使用普通函数一样进行调用。Lambda表达式的最常见用法就是作为其他函数的参数,例如:

vector v = 5 ;

for_each(v.begin(), v.end(), [](int x) {

  cout << x << ": " << x * x << endl;

});

上述代码中,使用lambda表达式作为for_each函数的第三个参数,对于容器v中的每个元素,输出该元素和它的平方。

不仅如此,lambda表达式还可以使用捕获列表来捕获外部变量,例如:

int a = 1, b = 2;

auto func = [a, &b]() mutable {

  a++;

  b++;

  cout << a << ", " << b << endl;

};

func(); // 输出:2, 3

cout << a << ", " << b << endl; // 输出:1, 3

在上述代码中,lambda表达式使用捕获列表捕获了变量a和b。捕获方式分为值捕获和引用捕获,使用&符号可以进行引用捕获,加上mutable修饰符可以允许在函数体中修改值捕获的变量。

总之,lambda表达式是C++语言中非常强大的一种编程工具,可以简化代码,提高编码效率。它具有灵活的语法和捕获外部变量的能力,可以和STL算法等其他函数一起使用,使得代码编写更加高效。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复