C++11中lambda函数

本文介绍了C++11引入的Lambda表达式,包括其语法结构(捕捉列表、参数、mutable、返回类型和函数体),以及与仿函数的关系。重点讲解了Lambda作为匿名函数和函数式编程的一部分,以及可能遇到的编译器错误及其原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lambda 表达式(lambda expression)是一个匿名函数,从软件开发角度看,也是一种编程范型。C++11 开始支持函数式编程范型lambda。

lambda函数的语法定义如下:

[capture] (parameters) mutable ->return-type {statement}

 
其中,
[capture]: 捕捉列表。
    捕捉列表总是出现在lambda函数的开始处。事实上,[]是lambda引出符。编译器根据该引出符判断接下来的代码是否是lambda函数。允许访问当前作用域下的某一个(些)变量
  语法上,捕捉列表由多个捕捉项组成,并以逗号分割。捕捉列表有如下几种形式:
    [var] 表示值传递方式捕捉变量var。
    [=] 表示值传递方式捕捉所有父作用域的变量(包括this)。
    [&var] 表示引用传递捕捉变量 var。
    [&] 表示引用传递捕捉所有父作用域的变量(包括this)。
    [this] 表示值传递方式捕捉当前的 this 指针。
    [=,&var] 捕获当前作用域所有变量,以值传递,但以引用传递var(也可以使用[&,var]来进行值传递)


(parameters): 参数列表。
    与普通函数的参数列表一致。如果不需要参数传递,则可以连同括号0一起省略。

mutable: mutable修饰符。
默认情况下,lambda丽数总是一个const函数,mutable可以取消其常量性。在使用该修饰符时,参数列表不可省略(即使参数为空)。

->return-type:返回类型。
    用追踪返回类型形式声明函数的返回类型。出于方便,不需要返回值的时候也可以连同符号->一起省略。此外,在返回类型明确情况下,也可以省略,让编译器对返回类型进行推导。

{statement}: 函数体。
    内容与普通函数一样,不过除了可以使用参数之外,还可以使用所有捕获的变量。

简单用例: 

int main()
{
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值