lambda表达式(匿名函数)
    好处:使代码简洁。
    lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的匿名函数

    好处:
    1、lambda 函数比较轻便,即用即删除,很适合需要完成一项功能,但是此功能只在此一处使用,
    连名字都很随意的情况下;
    2、匿名函数,一般用来给 filter, map 这样的函数式编程服务;
    3、作为回调函数,传递给某些应用,比如消息处理

    【1】捕获值列表
    是允许我们在Lambda表达式的函数体中直接使用这些值,捕获值列表能捕获的值是所有在此作用域可以访问的值,包括这个作用域里面的临时变量,类的可访问成员,全局变量。
    捕获值的方式分两种,一种是按值捕获,一种是按引用捕获。顾名思义,按值捕获是不改变原有变量的值,按引用捕获是可以在Lambda表达式中改变原有变量的值。

    【2】[捕获值列表]:
    1、空。没有使用任何函数对象参数。
    2、=。函数体内可以使用Lambda所在作用范围内所有可见的局部变量(包括Lambda所在类的this),并且是值传递方式(相当于编译器自动为我们按值传递了所有局部变量)。
    3、&。函数体内可以使用Lambda所在作用范围内所有可见的局部变量(包括Lambda所在类的this),并且是引用传递方式(相当于编译器自动为我们按引用传递了所有局部变量)。
    4、this。函数体内可以使用Lambda所在类中的成员变量。
    5、a。将a按值进行传递。按值进行传递时,函数体内不能修改传递进来的a的拷贝,因为默认情况下函数是const的。要修改传递进来的a的拷贝,可以添加mutable修饰符。
    6、&a。将a按引用进行传递。
    7、a, &b。将a按值进行传递,b按引用进行传递。
    8、=,&a, &b。除a和b按引用进行传递外,其他参数都按值进行传递。
    9、&, a, b。除a和b按值进行传递外,其他参数都按引用进行传递。

    格式:[捕获列表] (参数列表){函数主体};

    1. int main()
    2. {
    3. int i = 1024;
    4. auto func = [](int i) { // (int i) 是指传入改匿名函数的参数
    5. cout << i;
    6. };
    7. func(i);
    8. }
    9. int main()
    10. {
    11. []{
    12. cout << "Hello,Worldn";
    13. }();
    14. }
    15. int main()
    16. {
    17. int i = 1024;
    18. auto func = [=]{ // [=] 表明将外部的所有变量拷贝一份到该函数内部
    19. cout << i;
    20. };
    21. func();
    22. }