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函数来模拟这一语法。

最新文章

  1. git rm–r folder fatal:pathspec "" did not match any files
  2. java中不带package和带package的编译运行方式
  3. 教你怎么安装RabbitMQ
  4. Hadoop-eclipse-plugin插件安装
  5. HDU-4655 Cut Pieces 数学,贪心
  6. Android开发10.1:UI组件适配器AdapterView(创建ListView,Adapter接口)
  7. Elasticsearch 5.0 _source field的简单认识
  8. DSAPI 字符串和文件转Md5字符串
  9. nodeJs 控制台打印中文显示为Unicode解决方案
  10. 王垠的40行代码,究竟diao在哪里
  11. 智能合约 solidity 开发的环境基本搭建
  12. Swift 学习- 03 -- 基本运算符
  13. Codeforces 316E3 线段树 + 斐波那切数列 (看题解)
  14. mac 互传文件
  15. 边框回归(Bounding Box Regression)详解
  16. js面向对象、创建对象的工厂模式、构造函数模式、原型链模式
  17. MapGIS计算瓦片数据集
  18. Debian apt-get 用法
  19. 定时器Enable Disable控制
  20. MongoDB副本集的工作原理

热门文章

  1. leetcode刷题-91解码方法
  2. ES ElasticSearch 7.x 下动态扩大索引的shard数量
  3. JZOJ1495 宝石
  4. 安装最新LAMP环境(CentOS7+PHP7.1.5+Mysql5.7)
  5. [算法]体积不小于V的情况下的最小价值(0-1背包)
  6. Linux实战(1):装机一键设置脚本-初级版
  7. Analytics Zoo Cluster Serving自动扩展分布式推理
  8. Python爬虫开发者工具介绍
  9. hystrix熔断器之配置
  10. 容器云平台No.4~kubernetes 服务暴露之Ingress