Lambda 表达式
上一篇曾说过,函数5的槽函数可以使用Lambda 表达式,这里对其进行一下学习笔记记录。
首先介绍下Lambda表达式的语法结构:
[capture](parameters) mutable ->return-type{statement}
1.[capture]: 捕捉列表, 位于Lambda函数的开始处。其中,[]是Lambda引出符。编译器根据该引出符判断接下来的代码是否是Lambda函数。捕捉列表能够捕捉上下文中的变量以供Lambda函数使用;
例如:
2.(parameters): 参数列表,如果不需要参数传递,则可以连同括号“()”一起省略;
3.mutable: 在c++中,mutable是一个关键字,其作用和const相对。const 函数中,无法对变量进行值得修改。而mutable关键字的使用,使得常量性得到了消除,从而使得我们我们可以在一个静态的函数中对变量的值进行修改。那么问题来了,他在lambda表达式中的用途是啥呢?其实,默认情况下,lambda总是const的。
4. ->: 这是一个固定的字符格式,记住就好。他的意思是:转成。
5. return-type表示的是一个返回类型,我们可以在不需要返回值的时候连同符号”->”一起省略。此外,在返回类型明确的情况下,也可以省略该部分,让编译器对返回类型进行推导;
6. {statement}: 大括号里面进行的就是你想要的功能代码了。可食用的变量包括参数和捕获的变量。
Lambda表达式与普通函数最大的区别是,除了可以使用参数以外,还可以通过捕获列表访问一些上下文中的数据。
具体地,捕捉列表描述了上下文中哪些数据可以被Lambda使用,以及使用方式(以值传递的方式或引用传递的方式)。
语法上,在“[]”包括起来的是捕捉列表,捕捉列表由多个捕捉项组成,并以逗号分隔。捕捉列表有以下几种形式:
1.[var]表示值传递方式捕捉变量var;
2.[=]表示值传递方式捕捉所有父作用域的变量(包括this);
3.[&var]表示引用传递捕捉变量var;
4.[&]表示引用传递方式捕捉所有父作用域的变量(包括this);
5.[this]表示值传递方式捕捉当前的this指针。
好了这里大多都可以看的明白,唯有这个父作用域,我们需要进一步解释一下:所谓父作用域,就是包含Lambda表达式的“{}”代码块。
另外我们还可以组合使用捕捉项完成我们想要的功能。
参考网站:https://blog.csdn.net/graceland525/article/details/75009588