c++ 11 之lambda
lambda被用来表示一种匿名函数,这种匿名函数代表了一种所谓的lambda calculus。以lambda概念为基础的”函数式编程“是与命令式编程、面向对象编程等并列的一种编程范型。
[capture](parameters)mutable ->return-type{statement}
其中,
- [capture] :捕捉列表,[]是lambda引出符,编译器根据该引出符判断接下来的代码是否是lambda函数。捕捉列表用于捕捉父域中的变量以供lambda函数使用,捕捉列表可以由多个项组成,用","分割。[var]表示以值传递方式捕捉父域中的变量var,[=]表示以值传递方式捕捉父域中的所有变量(包括this),[&var]表示以引用传递方式捕捉父域中的变量var,[&]表示以引用传递方式捕捉父域中的所有变量(包括this),[this]表示以值传递方式捕捉当前的this指针。
- (parameters):参数列表,与普通函数的参数列表一致,如果不需要参数传递,则可以连同括号()一起省略。
- mutable: mutable修饰符,默认情况下,lambda函数总是一个const函数,mutable可以取消其常量性。在使用该修饰符时,参数列表不可省略(即使参数为空)。
- ->return-type: 返回类型,用追踪返回类型形式声明函数的返回类型,不需要返回值的时候可以连同符号->一起省略。在返回类型明确的情况下,也可以省略该部分,让编译器对返回类型进行推导。
- {statement}: 函数体,内容与普通函数一样,不过除了可以使用参数之外,还可以使用所有捕获的变量。
注意:
#include <iostream>int main()
{int a = 3;int b = 4;int c = 5;auto fun = [=, &b](int c) ->int {return b += a + c;};std::cout << "fun ret=" << fun(c) << std::endl;// 打印12std::cout << "b =" << b << std::endl;// 打印12
}
例如调用<algorithm>中的std::sort,ISO C++ 98 的写法是要先写一个compare函数:
1 2 3 4 |
|
然后,再这样调用:
1 |
|
然而,用ISO C++ 11 标准新增的Lambda表达式,可以这么写:
1 |
|
这样一来,代码明显简洁多了。
c++ 11 之lambda相关推荐
- C++11中Lambda表达式的使用
Lambda表达式语法:[capture ] ( params ) mutable exception attribute -> return-type { body } 其中capture为定 ...
- C++11:lambda表达式
文章目录 1. 概念 2. 语法 3. 示例 示例1 示例2 示例3 示例4 4. 捕捉方式 基本方式 隐式和混合 补充 5. 传递lambda表达式 示例 6. 原理 7. 内联属性 1. 概念 l ...
- 【C++11】lambda函数及其基本用法
目录 即看即用 详情 基本概念和用法 捕获列表 lambda表达式的类型 即看即用 语法: [capture](parameters)->return-type {body} []叫做捕获说明符 ...
- c++ lambda函数_C++11 之 lambda函数的详细使用
1. lambda 函数概述 lambda 表达式是一种匿名函数,即没有函数名的函数:该匿名函数是由数学中的λ演算而来的.通常情况下,lambda函数的语法定义为: [capture] (parame ...
- QT5和C++ 11:Lambda是你的朋友(翻译文)
前言 自从Qt5发布以来,我一直在推迟对我一直在做的一个项目升级到Qt5.即使是像这样的版本,从Qt 4.7到Qt 5(没错,跳过了4.8),出于某种原因也不像暗示的那么简单.他们说: &qu ...
- c++11 lambda
为什么需要lambda函数 匿名函数是许多编程语言都支持的概念,有函数体,没有函数名.1958年,lisp首先采用匿名函数,匿名函数最常用的是作为回调函数的值.正因为有这样的需求,c++引入了lamb ...
- C++11 Lambda表达式
1.简介 1.1定义 C++11新增了很多特性,Lambda表达式(Lambda expression)就是其中之一,很多语言都提供了 Lambda 表达式,如 Python,Java ,C#等.本质 ...
- 234-C++11的auto和lambda
C++11的auto使用方法 auto在C语言已经失去了意义 我们来谈谈C++11的auto使用方法 我们上代码 示例1: 这里的x和y的类型我们没有确定,但是有了上面a和ft的定义,auto可以推导 ...
- C++11 lambda表达式与函数对象
C++ lambda表达式与函数对象 lambda表达式是C++11中引入的一项新技术,利用lambda表达式可以编写内嵌的匿名函数,用以替换独立函数或者函数对象,并且使代码更可读.但是从本质上来讲, ...
- 什么是AWS Lambda?
什么是AWS Lambda? 计算服务的演进 EC2------Container-------Lambda 虚拟机---容器--------------serverless无服务器架构 EC2(El ...
最新文章
- Forbidden Attack:7万台web服务器陷入被攻击的险境
- 算法62---最长回文子序列长度(子串)、回文子序列总共个数(子串)【动态规划】...
- 转这个博客了,以前的博客不用了。(技术为主,寒暄为辅)
- 编写DLL所学所思(2)——导出类
- 年结 利润分配-未分配利润年结
- 误删了microsoft visual c++后如何正常运行matlab
- mongodb实验报告_Dropwizard,MongoDB和Gradle实验
- PHP开发框架[国内框架]
- 结对编程,到底是双剑合璧还是脚趾抠地?
- 美团将建新上海总部 斥资65亿元拿下上海杨浦商办地块
- LINUX 安装RABBITMQ详细教程
- 如何高效阅读 Spark 和 Hadoop 这类大型开源项目源代码?
- 一副对联,送给所有创业小公司
- 图像处理-提取指定颜色
- Windows查看所有的端口及端口对应的程序
- 傲梅分区助手 linux,傲梅分区助手(详解磁盘操作)
- linux沙箱隔离_为容器提供更好的隔离:沙箱容器技术概览
- 安装VMware时,出现 安装程序无法继续 Microsoft Runtime DLL 安装程序未能完成安装,解决方法
- 虚拟筛选及其方法学验证与ROC曲线python实现
- Go基础:路径、文件名和包名的关系
热门文章
- 一次网站登录慢故障排查
- sencha touch 2中list控件分组排序
- 解码.NET 2.0配置之谜(一)
- 限制后的线性表--栈
- Android Studio Template(模板)开发,最后有参考
- Navicat Premium查看建表语句(DDL)
- MAC中让右键菜单出现终端(命令行)打开文件夹的功能
- FreeType 使用FT_MEM_ALLOC/FT_FREE内存操作
- LINUX编译GtkLP(开源的打印机图形化工具)
- 文字处理技术:页面布局时,有两个方向