基础不牢,地动山摇。虽然一把年纪了,但是还是不能放弃对基础知识的学习巩固。
#include <stdio.h>
struct Data {
public:
void test()
{
auto func = [this]{ // 通过导入this指针,来使用函数的成员变量或者成员函数
printf("func a:%d\n", ++a);
};
func();
}
private:
int a = 1;
};
int main()
{
//1.最简单的lambda
[]{};
//2.[var],[=],以值传递的方式导入变量
int a = 1;
int b = 10;
auto lb1 = ([a]{ // 2.1[var],导入单个变量
printf("a:%d\n", a);
//build error,[a],表示以值传递的方式导入变量a,没有导入b,所以b在此处是非法的
// printf("b:%d\n", b);
}
);
lb1();
auto lb2 = ([=]{ // 2.2[=],以值传递的方式导入所有的外部变量
printf("a:%d\n", a);
printf("b:%d\n", b);
}
);
lb2();
//3.[&var],[&],以引用的方式导入变量
auto lb3 = ([&a]{
a++;
// b++; // error: ‘b’ is not captured
}
);
lb3();
printf("a:%d\n", a);
auto lb4 = ([&]{
a++;
b++;
}
);
lb4();
printf("a:%d,b:%d\n", a,b);
// 4.混合使用
auto lb5 = ([a,&b]{
// a++; //error: increment of read-only variable ‘a’
printf("a:%d\n", a);
b++;
}
);
lb5();
printf("a:%d,b:%d\n", a,b);
auto lb6 = ([=,&b]{ // b按照引用的方式导入,其它的变量按照值的方式导入
// a++; // error: increment of read-only variable ‘a’
printf("a:%d\n", a);
b++;
}
);
lb6();
printf("a:%d,b:%d\n", a,b);
// 5.导入this
Data data;
data.test();
return 0;
}