当前位置: 首页 > news >正文

lambda函数

Lambda(函数指针)

lambda 是c++11非常重要也是最常用的特性之一,他有以下优点:

可以就地匿名定义目标函数或函数对象,不需要额外写一个函数

lambda表达式是一个匿名的内联函数

lambda表达式定义了一个匿名函数,语法如下:

[capture](params)->ret{body;};

其中capture是捕获列表,params是参数列表,ret是返回值,body是函数体。

捕获列表[]:捕获一定范围内的变量

参数列表():和普通函数的参数列表一样,如果没有参数,参数列表可以省略不写

auto fun = [](){return 0;};

auto fun = []{return 0;};

捕获列表

[]不捕获任何变量

[&]捕获外部作用域中的所有变量,并且按照引用捕获

[=]捕获外部作用域的所有变量,按照值捕获,靠欸过来的副本在函数体内是只读的.

[=,&a]按值捕获外部作用域中的所有变量,并且按照引用捕获外部变量a

[bar]按值捕获bar变量,不捕获其他变量

[this]捕获当前类中的this指针,让lambda表达式拥有和当前类成员函数同样的访问权限

返回值

一般情况下,不指定lambda表达式的返回值,编译器会根据return 语句自动推导返回值类型,但是需要注意的是lambda表达式不能通过列表初始化自动推导出返回值类型

用法:

与STL搭配使用

那么我们再比较一下函数指针方式以及lambda方式。函数指针的方式看似简洁,不过却有很大缺陷。

第一点是函数定义在别的地方,比如很多行以前(后)或者别的文件中,这样的代码阅读起来不方便

第二点则是出于效率考虑,使用函数指针很可能导致编译器不对其进行inline优化(inline对编译器而言并非强制),在循环次数较多的时候,内联的lambda和没有能过内联的函数指针可能存在着巨大的性能差别,因此相比函数指针,lambda拥有无可替代的优势。

http://www.lryc.cn/news/34640.html

相关文章:

  • 【Python入门第二十七天】Python 日期
  • C++基础知识【5】数组和指针
  • Vim使用操作命令笔记
  • 【论文阅读】Robust Multi-Instance Learning with Stable Instances
  • 洛谷 P5116 [USACO18DEC]Mixing Milk B
  • 华为OD机试 - 最左侧冗余覆盖子串(C 语言解题)【独家】
  • 《Netty》从零开始学netty源码(三)之SelectorProvider
  • 实验7 图像水印
  • 如何实现大文件断点续传、秒传
  • 备战蓝桥python——完全平方数
  • WebRTC中的NAT穿透
  • SpringCloud-高级篇(一)
  • 电脑自动重启是什么原因?详细解说
  • 2023美国大学生数学建模竞赛E题思路
  • 蓝桥杯三月刷题 第五天
  • Echarts 水波图实现
  • 逻辑优化基础-shannon decomposition
  • Java中线程池的创建与使用
  • 关于HashMap与OkHttp的使用
  • 华为OD机试 - 单词倒序(C 语言解题)【独家】
  • 搭建Samba服务器
  • Matlab进阶绘图第5期—风玫瑰图(WindRose)
  • 【SQL开发实战技巧】系列(二十四):数仓报表场景☞通过执行计划详解”行转列”,”列转行”是如何实现的
  • XILINX AXI总线学习
  • 2022CCPC女生赛(补题)(A,C,E,G,H,I)
  • 【Nginx】Nginx的安装配置
  • 数学小课堂:统计时有效地筛选数据
  • MySQL安装优化
  • RocketMQ系列开篇
  • logback无法删除太久远的日志文件?logback删除日志文件源码分析