以下代码主要提及Lambda表达式的三个方面:
1 Lambda表达式的标准格式;
2 外部变量值捕获与引用捕获的区别;
3 返回值设置
#include<iostream>
using namespace std;
int main()
{
int a = 1, b = 1;
//最普通的表达式
auto f1 = [] () {return 5; };
cout << f1() << endl;
//带一个参数
auto f2 = [](int x) {return 1 + x; };
cout << f2(5) << endl;
//值捕获外部变量,在内部改变捕获的变量需要添加mutable关键字,且不会改变外部变量的值
auto f3 = [a](int x)mutable {return x + a++; };
cout << f3(5) << " ";
cout << a << endl;
//引用捕获外部变量,引用变量改变会改变外部变量的值,不需要添加mutable关键字
auto f4 = [&a](int x) { return x + a++; };
cout << f4(5) << " ";
cout << a << endl;
//=代表全部值捕获
auto f5 = [=](int x)mutable {return x + a++ + b++; };
cout << f5(5) << " ";
cout << a << " " << b << endl;
//&表示全部引用捕获
auto f6 = [&](int x) {return x + a++ + b++; };
cout << f6(5) << " ";
cout << a << " " << b << endl;
//表示除了b使用引用捕获外,其他变量都采用值捕获
auto f7 = [=, &b](int x)mutable {return x + a++ + b++; };
cout << f7(5) << " ";
cout << a << " " << b << endl;
//表示除了b使用值捕获外,其他变量都采用引用捕获
auto f8 = [&, b](int x)mutable {return x + a++ + b++; };
cout << f8(5) << " ";
cout << a << " " << b << endl;
//返回类型可以指定,可以强制转换
cout << f1() << " sizeof_f1:" << sizeof(f1()) << endl;
auto f9 = []() ->bool { return 5; };
cout << f9() << " sizeof_f9:" << sizeof(f9()) << endl;
system("pause");
return 0;
}