C++11 Lamada表达式

Lamada表达式是C++11最重要也是最常用的特性之一。Lamada来源于函数式编程的概念,也是现代编程语言的一个特点。

Lamada表达式定义

下图展示出了C++ Lamada表示的组成部分:
这里写图片描述

其中:
① 指明捕获列表
② 指明参数列表
mutable可选项。和常规的mutable用法类似,即当lamada表达式参数是const时,使用mutable可以取消这种const.
throw可选项。和常规的throw用法类似,即用于指明lamada函数体不会抛出异常。
⑤ 指定返回类型
⑥ Lamada函数体

根据上图定义一个完整的lamada表达式:

auto f = [](int a) throw() -> int { return a + 1; };

返回类型

很多时候lamada表达式的返回值类型是非常明显的,编译器可以根据return语句自动推导出返回类型,这个时候我们可以省略表达式的返回值定义:

auto x1 = [](int a) {return a + 1};     // OK: return type is int

但是,初始化列表不能用于返回值的自动推导:

auto x2 = [](int a) {return {a+1, a+2}; };   // error: 无法推导出返回值类型

捕获列表

lamada表达式可以通过捕获列表捕获一定范围内的变量:

  • [] 不捕获任何变量。
  • [&] 按引用捕获:捕获外部作用域中的所有变量,并作为引用在函数体中使用。
  • [=] 按值捕获:捕获外部作用域中的所有变量,并作为副本在函数体中使用。
  • [=, &foo] 按值捕获外部作用域中的所有变量,并按引用捕获foo变量。
  • [bar] 按值捕获bar变量,同时不捕获其他变量。
  • [this] 捕获lamada所在的当前类中的this指针,让lamada表达式拥有和当前类成员函数同样的访问权限。如果已经使用了&=,就默认添加此选项。捕获this的目的是可以在lamada中使用当前类的成员函数和成员变量。

参考:https://msdn.microsoft.com/en-us/library/dd293608.aspx

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

china_jeffery

你的鼓励是我前进的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值