[ ] 捕获行为
-
[]默认不捕获,就代表不能用lambda函数体外的参数 -
=值拷贝捕获 -
&引用捕获 -
[=,&name] 除了name使用引用,其他使用是值拷贝 -
所有值拷贝的数据不能在函数体内使其左值修改,如果想要修改可以使用mutable -
[=] () mutable{a++;}; -
[this] 表示可以使用所在类中的成员变量或者函数
int Func(int id, string name)
{
int a =0;
float b = 10.23f;
//默认不捕捉外部变量,返回值类型int
auto func_ptr = []()->int{return 1; };// result 1
//捕捉:全部值传递,返回a+b
auto func_ptr = [=]()->int{return a+b; };//result 10
//值传递,name使用引用传递
auto func_ptr = [=,&name]() {
float c = a + b;
name += "hello";
return c;
};
//值拷贝不能修改捕获的值,需要添加mutable
[=]() mutable{
a += 1;
};
//()设置形参
auto func_ptr = [](int aa, int bb) {
return aa + bb;
};
cout << func_ptr(1,2) << endl;
//主动调用lambada,在结尾的地方调用(),如果需要传入参数,则传入参数
[](int aa) {
aa++;
cout << aa << endl;
}(100);
//除了name使用值拷贝,其他使用引用
[&, name](){
float c = a + b;
name += "sdf";//错误,不能修改的左值
return name;
}();
cout << (decltype(func_ptr(1, 2) = typeid(int)) << endl;
return 0;
}
|