lambda函数的作用就是可以编写内嵌的无名函数,而不必写成独立的函数;
结构:[]为开始,(参数){函数体}
例如:
1.
auto lambdaFun1 = [](int a) {std::cout << "hello world" << std::endl; }; //定义lambdaFun1函数 lambdaFun1(1); //调用lambdaFun1函数
2.可以指明返回类型
在()后采用->,称为拖尾返回类型;
auto lambdaFun2 = [](int a, int b) {return a + b; }; int a = lambdaFun2(3, 4); std::cout << a << std::endl;
3.lambda函数可以在其封装的作用域内捕捉变量
float data = 10; auto returnNum = [data] {std::cout << "data : " << data << std::endl; }; returnNum();
4。当在外捕捉的变量为const类型的时候,我们想在lambda函数体内改变这个const的值,可以引入mutabl来指明这个const转化为非const变量
int a = 10; auto returnNum = [a]() mutable {a *= 2; std::cout << "a :" << a << std::endl; }; returnNum(); std::cout << a << std::endl;
结果是:
a :20
10
注意的是:使用mutable时必须书写();
5.捕捉的方式:
[=] : 表示值捕捉所有的变量
[&] :表示通过引用捕捉所有变量
[&x] : 表示捕捉变量x,而且还是按引用来捕捉的,
[x] : 表示按值捕捉变量x
[=,&x,&y] :表示按值捕捉所有的变量但是除了x和y,以为x和y时按引用捕捉的;
[this] :捕捉周围的对象