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 

posted @ 2019-03-08 18:04  水尺  阅读(183)  评论(0编辑  收藏  举报