c++教程:匿名函数
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;
}