[原创](Modern C++)现代C++的Lambda表达式常规概念以及细节探讨

[简介]
常用网名: 猪头三
出生日期: 1981.XX.XX
QQ联系: 643439947
个人网站: 80x86汇编小站 https://www.x86asm.org
编程生涯: 2001年~至今[共22年]
职业生涯: 20年
开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python
开发工具: Visual Studio、Delphi、XCode、Eclipse、C++ Builder
技能种类: 逆向 驱动 磁盘 文件
研发领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全/macOS应用软件安全
项目经历: 磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测

[序言]
(Modern C++)现代C++的Lambda表达式, 在C++11已经定型, 但是在此之后, C++14, C++17又开始进行扩展. 因此有必要做一些详细记录. 另外Lambda表达式的捕获, 隐藏很多细节, 因此有必要认真理解清楚.

[捕获列表说明]

[]
空捕获列表, Lamdba不能使用所在函数中的变量.

[names]
names是一个逗号分隔的名字列表, 这些都是Lamdba所在函数的局部变量. 默认情况下,捕获列表中的变量都是拷贝, 名字前如果使用了&, 则采用引用捕获方式.

[&]
隐式引用捕获列表, Lamdba体中将引用所在函数的变量的值. (注意: 默认会包含类的this指针)

[=]
隐式值捕获列表, Lamdba体中将拷贝所在函数的变量的值. (注意: 默认会包含类的this指针)

[&, identifier_list]
identifier_list是一个逗号分隔的名字列表, 包含0个或者多个来自所在函数的变量, 这些变量均采用值捕获方式. 未列入identifier_list的变量, 均采用引用捕获方式. identifier_list中的名字前面不能使用&

[=, identifier_list]
identifier_list是一个逗号分隔的名字列表, 包含0个或者多个来自所在函数的变量, 这些变量均采用引用捕获方式. 未列入identifier_list的变量, 均采用值捕获方式. identifier_list中的名字前面必须使用&

[其他特性说明]
1: mutable关键字: 表示该Lamdba体中可以改变值捕获列表的变量.
2: 支持throw()异常机制
3: 支持返回类型
4: 支持constexpr关键字
5: 捕获列表支持初始化新的变量

[细节说明, 非常重要]
默认情况下, 声明一个Lamdba, 那么Lamdba的数据成员也在Lamdba创建时被初始化了. 而不是在调用时初始化.
代码说明:

int int_Value = 42 ;
// Lamdba对象在声明时, 初始化, 并捕获了int_Value的数值42
auto fun_Lamdba = [int_Value]() mutable {return ++int_Value ;} ; 
int_Value = 0 ; // 尝试验证
auto int_Result = fun_Lamdba() ; // 结果返回43. 正好表明:Lamdba的数据成员在Lamdba创建时进行捕获, 而不是在调用时捕获.

[结尾]
上面内容是关于(Modern C++)现代C++的Lambda表达式常规概念以及细节探讨, 希望对大家有所帮助.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Day2:JAVA变量、数据类型、运算符的认识】

目录 1、变量的介绍、定义、使用2、标识符2.1 概念2.2 标识符的命名规则2.3 标识符的命名规范 3、数据类型3.1 基本数据类型3.2 引用数据类型 4、Scanner键盘录入4.1 键盘录入效果介绍4.2 键盘录入的三个步骤 5、运算符5.1 运算符和表达式5.2 算数运算符5.3 自增自减运算符5.4 …

JUC------共享模型------管程

概念 什么是管程 管程(Monitor,直译是”监视器“的意思)是一种操作系统中的同步机制,它的引入是为了解决多线程或多进程环境下的并发控制问题。 翻译为 Java 领域的语言,就是管理类的成员变量和成员方法,…

在vue3中测试执行typescript代码片段

官方推荐的vitest方法 在vue3typescript项目中,一般来说用vite做构建系统。做测试的话,目前官方推荐的是vitest。官方文档在 https://vitest.dev/guide/ 在vue3typescriptvite5项目中,运行安装命令 npm install -D vitest 就可以把vites…

批量获取oracle库存储过程

场景:需要获取oracle库下的存储过程做备份 示例:获取单个存储过程,sql实现如下 SELECT owner,object_name,object_type FROM dba_objects; SELECT DBMS_LOB.SUBSTR(DBMS_METADATA.GET_DDL(FUNCTION,CONCATSTR,TEST)) FROM DUAL; CREATE OR REPLACE EDITIONABLE FUNCTION &quo…

【教学类-55-02】20240512图层顺序挑战(四格长条纸加黑色边框、4*4、7张 、43200张去掉非7色有23040张,去掉重复样式有几种?)

作品展示 背景需求: 之前的代码吗存在几个问题,最大的问题是不能生成“”长条黑边框”” 【教学类-55-01】20240511图层顺序挑战(四格长条纸)(4*4)和“手工纸自制参考图”-CSDN博客文章浏览阅读485次&…

使用Navicat将MySql数据库导入和导出

一,导出数据表 1.使用Navicat打开数据库,右键数据库,点击转储SQL文件,点击结构和数据。 2.选择生成文件的地方 3.等待生成完成 4.生成完成 二,导入数据库表和数据SQL文件 1.新建一个数据库 2.右键选择运行SQl文件 记…

OSPF协议1

OSPF开放式最短路径优先协议 1,OSPF协议因为其传递的是拓扑信息,之后,通过SPF算法将图形结构转换成为树形结构,所以,其计算出的路径不存在环路。并且,OSPF是使用带宽作为开销值的评判标准,所以…

如何利用甘特图来提高资源的是使用效率?

在项目管理中,甘特图是一种常用的工具,用于规划和跟踪项目进度。它通过条形图的形式展示项目的时间表和任务依赖关系,帮助项目经理和团队成员清晰地了解项目的时间线和进度。通过合理利用甘特图,可以显著提高资源的使用效率&#…

一文入门DNS

概述 DNS是一个缩写,可以代表Domain Name System,域名系统,是互联网的一项基础服务。也可以代表Domain Name Server,域名服务器,是进行域名和与之相对应的IP地址相互转换的服务器。DNS协议则是用来将域名转换为IP地址…

1W、2W 3KVAC隔离 宽电压输入 交直两用AC/DC 电源模块 ——TP01(02)AZ 系列

TP01(02)AZ为客户提供一款超小体积模块式开关电源,该系列模块电源输出功率为1W、2W,具有极低的空载损耗,低漏电流仅0.1mA,小体积,隔离耐压高达3KV等特点。产品安全可靠,EMC 性能好,EMC 及安全规…

Ubuntu安装Mysql数据库无法远程连接

1.远程端口未开 2.Mysql 数据库中user表 2.1 用户名root 的host字段味更改为% 允许远程访问; use mysql;SELECT user,host,plugin,authentication_string FROM user;userhostpluginauthentication_stringroot%auth_socketdebian-sys-maintlocalhostcaching_sha2_p…

树莓派配置双网卡分别为AD HOC和AP模式

树莓派配置双网卡分别为AD HOC和AP模式 需求说明:为了实现分级网络管理,将多个无人机分簇,簇间使用AD HOC进行无中心自组织的网络,簇内使用AP-AC模式进行中心化网络。因此,需要配置一台设备,同时完成AD HOC…

Quartz.Net(1)

Quartz 1 Quartz是一个强大的、开源的、轻量级的任务调度框架 Quartz官方文档 2 Quartz中有五个重要的概念 Scheduler 调度器Trigger 触发器Job 工作任务ThreadPool 线程池 ,不是CLI的线程池,而是Quartz特有的线程池JobStrore 调度存储,存…

三、配置带HybridCLR的ARCore开发环境

预告 本专栏将介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用。 专栏: Unity开发AR系列 插件简介 通过热更技术实现动态地加载AR场景,简化了AR开发流程,让用户可更多地关注Unity场景内容的制作。 “EnvInstaller…”支…

【eclipse】如何在IDE里创建一个Java Web项目?

如何在eclipse中创建一个动态Web项目并成功运行? 一、 最终效果 懒得写那么多了…我也不知道该怎么写了,有点乱,有问题可以在评论里留言,我看到会解决的,在这个过程中也踩到了一些坑,但好在有CSDN帮助解决…

【C++杂货铺】红黑树

目录 🌈前言🌈 📁 红黑树的概念 📁 红黑树的性质 📁 红黑树节点的定义 📁 红黑树的插入操作 📁 红黑树和AVL树的比较 📁 全代码展示 📁 总结 🌈前言…

文章模版--测试

学习目标: 提示:这里可以添加学习目标 例如: 一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 搭建 Java 开发环境掌握 Java 基本语法掌握条件语句掌握循环语句 学习时间&#…

四川汇昌联信:拼多多网点怎么开?大概需要多少钱?

想要开一家拼多多网点,你肯定很关心需要准备多少资金。下面,我们就来详细解答这个问题,并从多个角度分析开设网点的要点。 一、 开设拼多多网点,首要任务是确定启动资金。根据不同的经营模式和地区差异,成本会有所不同…

WIFI模块的AT指令联网数据交互--第十天

1.1.蓝牙,ESP-01s,Zigbee, NB-Iot等通信模块都是基于AT指令的设计 初始配置和验证 ESP-01s出厂波特率正常是115200, 注意:AT指令,控制类都要加回车,数据传输时不加回车 1.2.上电后,通过串口输出一串系统…

【面试经典题】环形链表

个人主页:一代… 个人专栏:数据结构 在面试中我们经常会遇到有关链表的相关题目,面试官通常会对题目给出拓展 下面我就两个leetcode上的一个双指针的题目为例,并对其进行拓展 题目链接:环形链表 题目描述&#xf…