c++ lambda表达式

1.定义

lambda表达式 就是一个函数(匿名函数),也就是一个没有函数名的函数。为什么不需要函数名呢,因为我们直接(一次性的)用它,嵌入式用的它,不需要其他地方调用它。
lambda表达式也叫闭包,闭就是封闭的意思,封闭就是其他地方都不调用它,包就是函数。
lambda表达式 其实就是一个函数对象,他内部创建了一个重载()操作符的类。
lambda 表达式的简单语法如下:[capture] (parameters) -> return value { body },只有 [capture] 捕获列表和 { body } 函数体是必选的,其他可选。

2.lambda表达式的语法归纳如下:

[ caputrue ] ( params ) opt -> ret { body; };

① capture是捕获列表;

② params是参数表;(选填)

③ opt是函数选项;可以填mutable,exception,attribute(选填)

mutable说明lambda表达式体内的代码可以修改被捕获的变量,并且可以访问被捕获的对象的non-const方法。

exception说明lambda表达式是否抛出异常以及何种异常。

attribute用来声明属性。

④ ret是返回值类型。(选填)

⑤ body是函数体。

捕获列表:lambda表达式的捕获列表精细控制了lambda表达式能够访问的外部变量,以及如何访问这些变量。

1).[ ]不捕获任何变量。

2).[&]捕获外部作用域中所有变量,并作为引用在函数体中使用(按引用捕获)。

3).[=]捕获外部作用域中所有变量,并作为副本在函数体中使用(按值捕获)。

4).[=,&foo]按值捕获外部作用域中所有变量,并按引用捕获foo变量

5).[bar]按值捕获bar变量,同时不捕获其他变量。

6).[this]捕获当前类中的this指针,让lambda表达式拥有和当前类成员函数同样的访问权限。如果已经使用了&或者=,就默认添加此选项。捕获this的目的是可以在lamda中使用当前类的成员函数和成员变量

例1

例2

例3 lambda最大的一个优势是在使用STL中的算法(algorithms)库时,如此一行代码就可以循环打印容器的数据。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值