C++中的lambda函数

lambda函数是函数式编程中的概念,由C++11引入,成为现代C++中重要的特性。

所谓lambda函数就是匿名函数,语法结构:

[capture list] (params) mutable noexcept -> return type { body }
  • capture list : 捕获列表
  • params : 参数列表
  • mutable : 是否能更改按值捕获的变量
  • noexcept : 是否抛出异常
  • -> return type : 返回类型
  • body : 函数体

这里面必须存在的只有捕获列表和函数体[capture list] { body }

基本概念

lambda函数在C++中也叫lambda表达式,由lambda表达式生成的对象叫做闭包(closure)。

C++是用仿函数类来实现lambda函数的,所以每一个lambda函数其实对应了一个闭包类

为什么需要mutable关键字

刚才说lambda函数其实对应了一个闭包类,但是它的调用接口默认是const的,所以需要显式加上mutable关键字。

捕获this

lambda函数只能捕获局部非静态变量,所以在类的成员函数中捕获时,无法直接捕获成员变量,但是可以捕获this:[this] (params) { body }

init capture

C++14引入了新的捕获模式,那就是init capture,可以用移动语义捕获,并且可以直接捕获成员变量,比如对于移动语义捕获:

[up = std::make_unique()] (params) { body }

在C++中,只有自己写仿函数类,或者使用bind函数来模拟这一语法。

lambda函数小结的更多相关文章

  1. 关于python中lambda 函数使用小结

    例子: 如果定义普通函数,一般都是这样写: def:ds(x): return 2*x+1 调用即: ds(5) 如果用lambda函数就是这么写,就是一句话: g =lambda x:2*x+1 调 ...

  2. 14.在Python中lambda函数是什么

    在Python中lambda函数是什么? It is a single expression anoymous function often used as inline function. lamb ...

  3. Python-内置函数小结

    内建函数,Python内置的函数(build in function),不需要引用其他包,一般成为BIF   abs() 计算绝对值,abs(-10),接收number,返回一个number   ma ...

  4. Python lambda函数

    python允许定义单行的小函数,定义lambda函数的形式如下: lambda 参数:表达式lambda函数默认返回表达式的值,可接收任意个参数,包括可选参数,但是表达式只有一个.

  5. python之map、filter、reduce、lambda函数 转

    python之map.filter.reduce.lambda函数  转  http://www.cnblogs.com/kaituorensheng/p/5300340.html 阅读目录 map ...

  6. python中lambda函数

    1.lambda函数使用如下: lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右侧的是返回值 >>> g=lambda x,y:x*y>>> g(4 ...

  7. Python 之 lambda 函数

    Python 支持一种单行匿名函数,这种函数称为 lambda,它最初借鉴自 Lisp. >>> add = lambda x, y: x +y >>> add(3 ...

  8. python之map、filter、reduce、lambda函数

    map map函数根据提供的函数对指定的序列做映射,定义:map(function, sequence[,sequence,...])--->list 例1 >>> map(l ...

  9. C++11—lambda函数

    [1]lambda表达式语法定义 lambda表达式的语法定义如下: [capture] (parameters) mutable ->return-type {statement}; (1) ...

随机推荐

  1. InnoDB 引擎中的索引类型

    首先索引是一种数据结构,并且索引不是越多越好.合理的索引可以提高存储引擎对数据的查询效率. 形象一点来说呢,索引跟书本的目录一样,能否快速的查找到你需要的信息,取决于你设计的目录是否合理. MySQL ...

  2. Typecho 使用

    安装 下载Typecho 链接:typecho 下载后得到一个压缩文件,解压后获得目录如下: 将该文件夹改名为blog并且上传到/var/www/blog目录下:如下: 修改apache配置 参考:链 ...

  3. linux账户的锁定和解锁、禁用账号

    l——lock锁定 S——STATUS查看 u——unlock解锁 1.通过passwd命令锁定和解锁: [root@localhost ~]# passwd -S abc ——passwd -S  ...

  4. maximo开发小结

    maximo的后台开发 从0开始的  就把自己写的一些代码放者 1. setWhere 的效果是在原有的sql上添加一个and 以及这个条件mboSetRemote.setWhere("EN ...

  5. IOC 原理

    SpringIOC实现原理 1. 依赖倒置 假设我们设计一辆汽车:先设计轮子,然后根据轮子大小设计底盘,接着根据底盘设计车身,最后根据车身设计好整个汽车.这里就出现了一个“依赖”关系:汽车依赖车身,车 ...

  6. 深入理解SVM,详解SMO算法

    今天是机器学习专题第35篇文章,我们继续SVM模型的原理,今天我们来讲解的是SMO算法. 公式回顾 在之前的文章当中我们对硬间隔以及软间隔问题都进行了分析和公式推导,我们发现软间隔和硬间隔的形式非常接 ...

  7. 利用python简单实现unittest

    python3的eval方法 eval() 函数用来执行一个字符串表达式,并返回表达式的值 # 例如 a = [1,2,3,4] b = "a" print(eval(b)) # ...

  8. Java多线程--原子性、可见性、有序性

    计算机的内存模型: 计算机在运行行程序的时候,指令由CPU执行,计算机上数据存放在物理内存当中,CPU在执行指令的时候免不了要和数据打交道.刚开始,还相安无事的,但是随着CPU技术的发展,CPU的执行 ...

  9. 虚拟机系列 | JVM运行时数据区

    本文源码:GitHub·点这里 || GitEE·点这里 一.内存与线程 1.内存结构 内存是计算机的重要部件之一,它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱 ...

  10. python实现随机复制若干个文件到新目录

    python实现随机复制若干个文件到新目录 1说明 1.1 目的 随机选择一个文件下的若干个文件,并将文件复制到新文件夹下 1.2 要求 需要将random_select_and_copy_file. ...