按值捕获
//按值捕获
#include<iostream>
using namespace std;
int main()
{
int t = 10;
/*[t]()
{
cout << t << endl;
}(); //直接调用形式(有参数直接加参数就行)
*/
//按值捕获,捕获的是声明匿名函数时,捕获列表参数的值
auto f = [t]()
{
cout << t << endl; //输出10
};
t = 12; //这里对t进行修改,不会对捕获到的t值产生影响了
f();
return 0;
}
按引用捕获
//按引用捕获
#include<iostream>
using namespace std;
int main()
{
int t = 10;
//按引用捕获,跟函数参数的传参方式理解一样(传地址,会修改到实参的值)
auto f2 = [&t]() //这里捕获到 t 的值是10,
{
cout << t << endl;
t = 13; //修改t的值(全局的t)
};
t = 11; //这里把t修改了,所以上面被捕获的的值也被改变,变成11
f2(); //输出11
cout << t << endl; //输出13
return 0;
}
捕获全部值:捕获列表写 "=" 号,即 [=]
捕获全部全部引用:捕获列表写 "&" 号,即 [&]
捕获部分值和部分引用:[a,b,&c,&d]