C++11引入了lambda表达式,使得C++程序员能够编写更简洁的回调函数和闭包,
Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。
1 语法
[捕获列表] (参数) mutable 或 exception 声明 -> 返回值类型 {函数体}
//计算两个值的和
auto func = [](int a, int b) -> int{return a+b;};
//当返回值的类型是确定时,可以忽略返回值
auto func = [](int a, int b){return a + b;};
//调用
int sum = func(1, 3);
2 语法分析
2.1 捕获列表
Lambda 表达式相当于一个类,那么捕获列表就是传递给这个类的类成员。比如:
class Labmda
{
public:
const int test;
Labmda(int value):test(value)
{
}
public:
int run(int a, int b)
{
return a + b + test;
}
}
int main()
{
int test = 10;
auto func = Labmda(test);
int sum = func.run(1, 3);
}
//使用Lambda 表达式的写法
int main()
{
int test = 10;
auto func = [test](int a, int b){return a + b + test;};
int sum = func(1, 3);
}
捕获列表有以下格式:
版本一:
- []:默认不捕获任何变量;
- [=]:Lambda表达式之前的局部变量,包括所在类的this,变量按值方式传递,默认以值捕获所有变量;
- [&]&#x