首页 > 编程笔记

C++ lambda表达式的用法

lambda 表达式是 C++11 标准中非常重要的一个新特性,它用于定义匿名函数,使得代码更加灵活、简洁。

lambda 表达式与普通函数类似,也有参数列表、返回值类型和函数体,只是它的定义方式更简洁,并且可以在函数内部定义。

lambda 表达式的语法格式如下所示:

[捕获列表](参数列表)->返回值类型 { 函数体 }

在上述语法格式中,参数列表、返回值类型、函数体的含义都与普通函数相同。如果 lambda 表达式不需要参数,并且函数没有返回值,则可以将()->和返回值类型一起省略。

捕获列表是 lambda 表达式的标识,编译器根据“[]”判断接下来的代码是否是 lambda 表达式。捕获列表能够捕获 lambda 表达式上下文中的变量,以供 lambda 表达式使用。

根据捕获规则,捕获列表有以下五种常用的捕获形式:
以上捕获方式还可以组合使用,通过组合,捕获列表可以实现更复杂的捕获功能,例如,[=,&a,&b] 表示以引用方式捕获变量 a 和变量 b,以值传递方式捕获其他所有变量。

示例

下面通过案例演示 lambda 表达式的使用,C++ 代码如下:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    int num = 100;
    //lambda表达式
    auto f = [num](int x)->int {return x + num; };
    cout << f(10) << endl;
    //创建vector对象v
    vector<int> v = { 54,148,3,848,2,89 };
    //调用for_each()函数遍历输出v容器中的元素
    for_each(v.begin(), v.end(), [](auto n) {cout << n << " "; });
    return 0;
}
运行结果:

110
54 148 3 848 2 89

示例分析:

优秀文章