11.lambda

    C++11中引入了lambda,lambda指的是定义一个内联(inline)函数,并且这个内联函数可以被用作一个参数或局部变量,这类似于函数对象(function object),由于lambda是一种内联的,因此效率上比函数对象高一些。

    以下lambda用法:“{}”中为函数体的实现,“()”中放的是函数参数,“[]”中放的是非静态的外部变量,也就是说在lambda函数体内可以用到lambda函数外的局部变量,并且若加上“&”意为传引用语义,都不加则为传值语义。 

     另外,若加上mutable关键字表示"[]"中的变量能否在函数体中被改变;加上throwSpec关键字表示该函数能否抛异常;加上“->retType”表示函数返回值类型,不加则表示函数无返回。以上3个关键字都是opt可选项,可写可不写。


以下是对于lambda语法的测试,注意最后一个框中要返回值,必须加上“->retType”。


以下是编译器对lambda写法的内部实现,可见与函数对象的实现很类似。


lambda虽然内部是函数对象,但其不存在默认构造函数和赋值操作,因此以下在使用过程中由于要用到cmp的构造函数,因此编译器会报错,这种情况下更应当使用函数对象。


lambda和函数对象在STL中使用的比较,可见lambda可将简短的实现直接写在调用处,代码更紧凑,同时它是inline的,效率上稍高一些。


    

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值