1、匿名函数的基本语法为:[ 捕捉的值 ]( 参数 )->返回值 { 代码 }例如#include <iostream>using namespace std;int main(){ auto f = [](int a, int b)->int { return a+b; }; cout << f(1,2); return 1;}
2、什么是捕获的值那?我们逐条来介绍:[ ] 试图在Lambda内使用任何外部变量都是错误的.例如: int c = 1; auto f = [](int a, int b)->int { a = c; return a+b; }; cout << f(1,2);这个例子是编译不过的。
3、[&] 用到的任何外部变量都隐式按引用捕获#include <iostream>using namespace std;int main(){ int c = 1; auto f = [&](int a, int b)->int { a = c; c = 2; return a+b; }; cout << f(1,2) <<"," << c << endl; return 1;}这个例子编译过了,但是c的值被修改了。
4、[=] 用到的任何外部变量都隐式按值捕获例如:#include <iostream>using namespace std;int main(){ int c = 1; auto f = [=](int a, int b)->int { a = c; c = 2; return a+b; }; cout << f(1,2) <<"," << c << endl; return 1;}给赋值会报错
5、[=, &c] c按引用捕获. 其它变量按值捕获#include <iostream>using namespace std;int main(){ int c = 1; auto f = [=,&c](int a, int b)->int { a = c; c = 2; return a+b; }; cout << f(1,2) <<"," << c << endl; return 1;}