1、语法
如何定义一个lambda表达式?
[捕获列表](参数列表)->返回类型
{
//函数体
}
2、[]捕获列表
捕获列表分为以下几种:
1)值捕获 ;2)引用捕获 ;3)隐式捕获;4)表达式捕获
语法形式分为以下几种:
1) [ ]:不捕获外部变量
2)[name]:按值捕获变量name
3) [&name]:按引用捕获变量name
4) [this]:捕获当前变量,表达式可以访问该对象的所有成员
5)[=] 值捕获所有变量
6) [&] 引用捕获所有变量
7)[=,&x] 默认按照值捕获所有变量,除了x按照引用捕获
8)[&,x]:默认按照引用捕获所有变量,除了x按照值捕获
9) [name1=expr1,name2=expr2,...]: 捕获一系列表达式
3、详细的例子
#include <iostream>
using namespace std;
int main(int argc,char** argv)
{
auto lambda1 = [](){
cout<<"this is a lambda1";
};
lambda1();
int a = 10;
int b = 20;
auto lambda2 = [a](){
cout<<"this is a lambda2 and a = "<<a<<endl;
};
lambda2();
auto lambda3 = [&a]() {
a *= 2;
cout<<"this a lambda3 and a = "<<a<<endl;
};
lambda3();
auto lambda4 = [a,&b](){
cout<<"this a lambda4 and a = "<<a<<" b = "<<b<<endl;
};
lambda4();
}