//值捕获
void fcn1()
{
size_t v1 = 42;
auto f = [v1] {return v1;};
v1 = 0;
auto j = f();
cout << "j = " << j <<endl;
}
分析:lambda采用值捕获的方式,该方法在lambda创建的时候拷贝,因此即使随后修改了捕获变量的值,也不会影响到lambda内对应的值。
//引用捕获
void fcn2()
{
size_t v1 = 42;
auto f = [&v1] {return v1;};
v1 = 0;
auto j = f();
cout << "引用捕获的处理结果为 = " << j <<endl;
}
分析:该方式采用引用方式进行捕获,用引用方法捕获的变量与其他类型的引用行为类似。当我们在lambda函数体内使用此变量的时候,实际上使用的是引用所绑定的对象。
//结果为
E:\clionnn\untitled\cmake-build-debug\untitled.exe
j = 42
引用捕获的处理结果为 = 0
Process finished with exit code 0