一、简介
- Lambda 表达式是 c++11 中语法之一(所以不要在 dev c++ 没添加 -std=c++11/-std=c++14 时使用了,等待你的是报错)。
- Lambda 表达式把函数看作对象,把这个表达式当做对象使用。
二、使用
- Lambda 表达式难以声明类型,故使用 c++11 引进的自动类型推断,即 auto,需在初始化是赋值,以便确定其类型,以后只能再赋值成初始类型。
int v1 = 1;
int v2 = 2;
// Lambda 表达式
auto MyLambda // 表达式名字
= [v1,v2] // 捕获,就是从附近的变量里找这个值以便在表达式中使用
(int v3, int v4) // 行参
{
return v1 + v2 + v3 + v4; // 表达式内容
}
// 表达式结束
cout << MyLambda(3,4); // 输出 10
- 这是一个空 Lambda 表达式:
auto MyLambda = [](){};
- lambda 表达式默认使用值传递的方式,如果想要使用引用传递,请加 “&” 。
auto MyLambda = [&v1,v2](int &v3, int v4)
{
return 1;
}
- 可以让系统自己确定要捕获什么,你只需要标明捕获方式即可:
int v1 = 1;
auto MyLambda = [&](int &v3, int v4)
{
return v1;
}
- 上面的例子是引用捕获再,看一个值捕获的:
int v1 = 1;
auto MyLambda = [=](int &v3, int v4)
{
return v1;
}
- Lambda 表达式是可以直接用作实参:
vector<int> MyVector{0,1,2,3,4,5,6,7,8,9};
sort(MyVector.begin(),MyVector.end(),
[](int a, int b)
{
return a < b;
}
);
你学会了吗?