对C11的“Lambda表达式”总结

本文详细介绍了C++ C11中的Lambda表达式,包括其组成部分:捕捉列表、参数声明、mutable描述符、throw()、返回类型和执行体。讨论了如何给Lambda表达式命名,如使用auto、函数指针和std::function。此外,还阐述了Lambda与STL的结合使用,以及mutable描述符对Lambda行为的影响。
摘要由CSDN通过智能技术生成

参考链接:
https://msdn.microsoft.com/zh-cn/library/dd293603(v=vs.110).aspx
https://msdn.microsoft.com/zh-cn/library/dd293608(v=vs.110).aspx
关于C++ Lambda表达式的汇编实现分析:
http://my.oschina.net/ybusad/blog/277445?fromerr=bNPdTMGh

第一次发表博客,请各位路过的有错请批评,也多给点建议:)

概要

C++在C11版本时支持Lambda表达式,至于什么是Lambda? Lambda表达式是一种“匿名函数”,没错它不需要名字,并且可以很自由的让它穿插在各种表达式中,当然也可以让它拥有名字使它变成一个“函数”。这种技术有利有弊,它能使某些工作变得更加灵活,但是也可能使代码变得混乱让人无法。

先体验一下Lambda表达式的使用

int a = 1, b = 2;
int z = [] (int x, int y) -> int { return x + b; } ( a, b ); // 该Lambda表达式计算a和b的和然后赋给z

Lambda表达式的组成

如下图所以Lambda的组成:
这里写图片描述
(在图中的标注,如下所示:)

  1. Lambda introduce(外部变量捕获列表)
  2. 参数声明列表
  3. mutable描述(不加mutable的话Lambda默认“可理解为const的方法”)
  4. 异常描述(描述该Lambda表达式可能会抛出什么异常)
  5. 返回类型
  6. 复合语句 (Lambda表达式的执行体(函数体))

注:可以把整个Lambda表达式当做是一个函数的名称,“函数名称 + ()”那就是函数调用了。

1. 捕捉列表(Lambda introduce)

“捕捉列表”用于描述在执行体中可以访问那些Lambda所在区域的变量(该Lambda表达式所在的地方要处于该变量的作用域之内)以及怎么访问。

捕捉列表的可能形式(不列出重复的和变形的情形):

[]:         不捕捉Lambda外部的任何变量
[=]:        捕捉外部的所有变量
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值