首页 > 编程语言 >浅析C++11 lambda表达式用法

浅析C++11 lambda表达式用法

时间:2023-03-30 20:45:44浏览次数:41  
标签:11 函数 捕获 C++ 表达式 Lambda 浅析 变量 lambda

Lambda表达式(匿名函数、Lambda函数)是现代C++在C ++ 11和更高版本中的一个新的语法糖,可以让我们快速便捷的创建一个函数。

[ capture-list ] ( params ) mutable exception attribute -> return-type { body }

capture-list:捕获列表,一般在Lambda表达式开头,捕获上下文中的变量,用逗号分隔。

params:参数列表,函数所需参数,写法同函数参数,但是不支持默认参数。若没有参数可连同"()"直接省略。

mutable:可变规格(修饰符),当捕获列表是以复制的形式捕获时,默认复制值为const,若指定mutable则可取消其常量性。

exception:异常说明,用于函数内部抛出异常。

attribute:声明属性。

return-type:返回值类型,可省略。

body:函数体。

捕获列表说明:lambda表达式的捕获列表精细控制了lambda表达式能够访问的外部变量,以及如何访问这些变量。

1).[]不捕获任何变量。

2).[&]以引用的方式捕获所有变量。

3).[=]以拷贝的方式捕获所有变量。

4).[=,&foo]按值捕获外部作用域中所有变量,并按引用捕获foo变量。

5).[var]表示值传递方式捕获变量var。

6).[this]捕获当前类中的this指针,让lambda表达式拥有和当前类成员函数同样的访问权限。如果已经使用了&或者=,就默认添加此选项。捕获this的目的是可以在lamda中使用当前类的成员函数和成员变量。

auto lambda_test = [] {std::cout << "Hello, World!\n";};
lambda_test();

上例将打印字符的lambda函数赋给了lambda_test,然后直接调用函数。运行可得到结果"Hello,World!"

Lambda应用场景:当我们需要使用一次性函数时我们可以直接使用lambda函数,避免工程文件定义过多的非常用函数。

 

参考文章:

https://paul.pub/cpp-lambda-function-bind/

https://blog.csdn.net/qq_37085158/article/details/124626913?spm=1001.2014.3001.5506

标签:11,函数,捕获,C++,表达式,Lambda,浅析,变量,lambda
From: https://www.cnblogs.com/Explosion556/p/17274219.html

相关文章

  • C++:explicit关键字
    C++中的explicit关键字只能用于修饰只有一个参数的类构造函数,它的作用是表明该构造函数是显示的,而非隐式的,跟它相对应的另一个关键字是implicit,意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)。那么显示声明的构造函数和隐式声明的有什么区别呢?来看下面的例子:class......
  • 使用蓝牙自动解锁或锁定win11
    蓝牙配对你的手机,安卓或者苹果都可以。当你手机离开一定距离后电脑将自动锁定。......
  • MySQL导入数据库1118错误解决方案[ERR] 1118 - Row size too large (> 8126). Changing
    MySQL导入数据库1118错误解决方案[ERR]1118-Rowsizetoolarge(>8126).ChangingsomecolumnstoTEXTorBLOB编辑sql文件,在开头设置一下innodb_strict_mode为0SE......
  • 《c++徒步》文件篇
    stdio.hfopen(),打开文件fopen(constchar*filename,constchar*mode)其中mode:"r",read:为输入操作打开文件,文件必须存在。"w",write:为输出操作创建一个空文件,......
  • 云存储继续火 Symform获1100万美元融资
    今年云储存火了,雷锋网昨天刚介绍一家云储存公司Terascala获1400万美元融资,今天一家云存储公司Symform也宣布融资1100万美元,由WestRiverCapital领头,已有投资人OVP及Longwo......
  • 即时通讯技术文集(第11期):IM通信格式的选型及Protobuf专题 [共16篇]
    为了更好地分类阅读52im.net总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第11 期。[- 1 -] 如何选择即时通讯应用的数据传输格式[链接] http://www.5......
  • C++创建虚拟打印机
    最近有个需求需要对报告打印进行统一的管理,最终实现方案如下:1、安装MicrosoftPrintToPDF虚拟打印机,该打印机可以将所有打印数据转换为PDF2、通过MicrosoftPrintToP......
  • C/C++ 思考:策略模式在协议解析中的应用
    目录引出问题传统解析方式策略模式简介UML类图改进1:基于函数的代码结构改进改进2:基于对象的结构改进参考引出问题在基于消息包的通信协议中,通常会通过一个id或命令名来标......
  • c++实战开发程序
    非常感谢您的进一步提问,以下是一个对于实战开发小程序的更具体的建议:第1周实战开发小程序建议:写一个简单的计算器程序,要求包含加、减、乘、除四种基本运算,并进行错误处理......
  • 编写高效C++代码的一些方法
    1.使用基于range的for循环这是C++11中非常酷的特性,如果你想从头到尾迭代,这是最好的方法。usingnamespacestd;intmain(){vector<int>vec={0,1,2,3,4};......