C++2.0--Lambda表达式
来源:互联网 发布:理查德杰弗森生涯数据 编辑:程序博客网 时间:2024/06/05 23:55
《C++Primer》中对lambda表达式的解释如下:
lambda表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。
微软官网对lambda表达式的解释如下:
1、捕获列表(capture list)
Lambda函数可以引用在它之外声明的变量. 这些变量的集合叫做一个闭包. 闭包被定义在Lambda表达式声明中的方括号[]内. 这个机制允许这些变量被按值或按引用捕获.下面这些例子就是:
[] //未定义变量.试图在Lambda内使用任何外部变量都是错误的.[x, &y] //x 按值捕获, y 按引用捕获.[&] //用到的任何外部变量都隐式按引用捕获[=] //用到的任何外部变量都隐式按值捕获[&, x] //x显式地按值捕获. 其它变量按引用捕获[=, &z] //z按引用捕获. 其它变量按值捕获
2、参数列表(parameter list),可选
3、mutable 选项(可选)
加上mutable后,lambda表达式体内的语句可以修改按值捕获的变量。
4、异常选项(可选)
加上throw()表示lambda表达式不抛出任何异常。
5、尾部返回类型(trailing-return-type) (可选)
一般来讲lambda表达式的返回值都可以由编译器自动猜测除非你指明了尾部返回类型。
6、函数体(function body)
和普通函数一样。
Lambda表达式的一个重要用途
在使用标准库函数的时候,可以大大简化函数调用。
下面的代码及使用建议来自《Google C++ Style Guide》
std::sort(v.begin(), v.end(), [](int x, int y) {return Weight(x) < Weight(y);});
int weight = 3;int sum = 0;// Captures `weight` by value and `sum` by reference.std::for_each(v.begin(), v.end(), [weight, &sum](int x) {sum += weight * x;});
std::set<int> blacklist = {7, 8, 9};std::vector<int> digits = {3, 9, 1, 8, 4, 7, 1};digits.erase(std::remove_if(digits.begin(), digits.end(), [&blacklist](int i) {return blacklist.find(i) != blacklist.end();}),digits.end());
Lambda表达式的使用建议
- Keep unnamed lambdas short. If a lambda body is more than maybe five lines long, prefer to give the lambda a name, or to use a named function instead of a lambda.
阅读全文
0 0
- 【c/c++】Lambda表达式
- C#--Lambda表达式
- C#:Lambda 表达式
- C++lambda表达式
- C++lambda表达式
- C# Lambda表达式
- C++:lambda表达式
- C#Lambda表达式
- 【c++】lambda表达式
- C++lambda表达式简记
- c#lambda表达式复习
- [C++]Lambda表达式简介
- 【C#】理解Lambda表达式
- 【C++】Lambda表达式
- C++lambda表达式
- C++Lambda表达式用法
- C++:lambda表达式
- 【C#】Lambda表达式
- 两个让你效率倍增的linux小命令
- 一个控制电脑关机的有趣程序
- 红茶一杯话Binder 四(传输机制篇_中)
- 考题篇(5.4) NSE4 18. 单点登录 ❀ 飞塔 (Fortinet) 网络安全专家
- idea创建springboot2+maven+springmvc项目
- C++2.0--Lambda表达式
- 船长日志--我的OI生涯---未完持续
- Maven+SpringMVC+Mybatis+ajax:后台传值到前台中文出现问号乱码问题
- AES CCM java代码
- 迷宫系列(四)其他细节和DFS的实际应用(重要)
- 17-12-16成都德芯科技数字电视IP复用器3013端口配置异常导致BUG重现步骤
- 考题篇(5.4) NSE4 19. 证书 ❀ 飞塔 (Fortinet) 网络安全专家
- java鬼混笔记:redis 6、redis持久化:RDB与AOP配置
- MacBook Pro 苹果电脑安装Nuke10.0以上版本,心得分享。