完整结构: [capture list] (params list) mutable exception-> return type { function body }
capture list:捕获外部变量列表
params list:形参列表,不能使用默认参数,不能省略参数名
mutable:用来说用是否可以修改捕获的变量
exception:异常设定
return type:返回值类型
function body:函数体
有时可以省略部分结构
[capture list] (params list) -> return type {function body}
[capture list] (params list) {function body}
[capture list] {function body}
C++14
泛型Lambda表达式
对捕获的变量进行初始化
C++17
可以进行初始化的if、switch语句
#include<iostream>usingnamespace std;classPerson{public:int m_age;};voidtestAuto(){auto i =10;auto name ="jack";auto d =9.6;auto p =newPerson();
p->m_age =10;}voidfunc(int p){
cout <<"func(int) - "<< p << endl;}voidfunc(int*p){
cout <<"func(int *) - "<< p << endl;}voidtest_nullptr(){/*int i = 10;
const char *name = "jack";
double d = 9.6;*/// int i = 0;// int *p = nullptr;/*func(0);
func(NULL);
func(nullptr);
cout << (nullptr == NULL) << endl;*/int array[]{10,20,30,40};for(int item : array){
cout << item << endl;}/*int length = sizeof(array) / sizeof(int);
for (int i = 0; i < length; i++)
{
cout << array[i] << endl;
}*/}//int sum(int a, int b) { return a + b; }//int minus1(int a, int b) { return a - b; }//int multiple(int a, int b) { return a * b; }//int divide(int a, int b) { return a / b; }intexec(int a,int b,int(*func)(int,int)){// ....// ...returnfunc(a, b);}intmain(){/*int (*p)(int, int) = [](int a, int b) -> int {
return a + b;
};
cout << p(10, 20) << endl;*//*cout << [](int a, int b) -> int {
return a + b;
}(10, 20) << endl;*//*cout << [](int a, int b) {
return a + b;
}(10, 20) << endl;*//*void(*p)() = [] {
cout << 1 << endl;
cout << 2 << endl;
cout << 3 << endl;
};
p();
p();*//*cout << exec(20, 10, sum) << endl;
cout << exec(20, 10, minus1) << endl;
cout << exec(20, 10, multiple) << endl;
cout << exec(20, 10, divide) << endl;*//*cout << exec(20, 10, [](int a, int b) { return a + b; }) << endl;
cout << exec(20, 10, [](int a, int b) { return a - b; }) << endl;
cout << exec(20, 10, [](int a, int b) { return a * b; }) << endl;
cout << exec(20, 10, [](int a, int b) { return a / b; }) << endl;*///int a = 10;//int b = 20;//auto p = [a] () mutable {// a++;// cout << "lambda - " << a << endl;//};//p(); 10//cout << a << endl;// 默认情况是值捕获/*auto p = [=, &a] {
cout << a << endl;
cout << b << endl;
};
a = 11;
b = 22;
p();*/if(int a =10; a >5){}elseif(int b =20; b >10){}elseif(2){}else{}getchar();return0;}