news 2026/2/1 22:36:20

现代C++特性深度探索:模板扩展、类增强、STL更新与Lambda表达式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
现代C++特性深度探索:模板扩展、类增强、STL更新与Lambda表达式
可变参数模版
4.4 emplace系列接口

通过前面的学习,我们知道emplace_back和push_back的区别其实不是很大,真正的区别就是:

  • emplace_bakc是一个可变参数模版,而push_back只是一个普通的函数

emplace_back可以传参数包进行构造,而push_back不能传参数包,要么是传插入的对象,或者是进行隐式类型转换

ok,当我们了解了这些,我们就来实现一个emplace_back:

4.5 emplace和emplace_back在list中的模拟实现

代码语言:javascript

AI代码解释

template<class ...Args> void emplace_back(Args... args) { emplace(end(), forward<Args>(args)...); } template<class ...Args> iterator emplace(iterator pos,Args&&... args) { Node* cur = pos._node; Node* newnode = new Node(forward<Args>(args)...); Node* prev = cur->_prev; // prev newnode cur prev->_next = newnode; newnode->_prev = prev; newnode->_next = cur; cur->_prev = newnode; return iterator(newnode); }

ok,当我们实现了emplace_back和emplace接口后,我们就要实现相应的可变模板参数版本的构造节点的代码:

代码语言:javascript

AI代码解释

template <class... Args> ListNode(Args&&... args) : _next(nullptr) , _prev(nullptr) , _data(std::forward<Args>(args)...) {}

ok,这样改完之后,我们就可以使用emplace_back进行尾插操作。

但是,当我们加上emplace_back后,push_back就不能使用万能引用版本的尾插,为什么?

  1. 库中并没有把push_back写成泛型化,因为有了emplace_back就没有必要将push_back写成泛型化
  2. 要兼容以前的代码,我们只能写一个左值版本和一个右值版本的push_back代码

总结:有了emplace_back,就不需要这个万能引用版的push_back,直接使用左值版本和右值版本的push_back

emplace_back总体而言是更高效,推荐以后使用emplace系列替代insert和push系列

  • 除此之外:emplace_back和push_back的用法是不能混着的~

五、C++11中类的新功能
5.1 默认的移动构造和移动赋值

原来的C++类中,有6个默认成员函数:构造、析构、拷贝构造、赋值重载、取地址重载、const取地址重载,最重要的是前4个,后2个用处不大

www.dongchedi.com/article/7591991060143276568
www.dongchedi.com/article/7591993025765736985
www.dongchedi.com/article/7591992867145810456
www.dongchedi.com/article/7591993008090923545
www.dongchedi.com/article/7591990378707370521
www.dongchedi.com/article/7591991513040093720
www.dongchedi.com/article/7591991177697100313
www.dongchedi.com/article/7591990171571159577
www.dongchedi.com/article/7591986152891384345
www.dongchedi.com/article/7591990378707304985
www.dongchedi.com/article/7591982069882929726
www.dongchedi.com/article/7591979961964380734
www.dongchedi.com/article/7591991367992361497
www.dongchedi.com/article/7591980885017723416
www.dongchedi.com/article/7591990705623679512
www.dongchedi.com/article/7591989903215854105
www.dongchedi.com/article/7591989168675488281
www.dongchedi.com/article/7591985092810474009
www.dongchedi.com/article/7591990210763096600
www.dongchedi.com/article/7591987365137433113
www.dongchedi.com/article/7591988325352129049
www.dongchedi.com/article/7591987781866979902
www.dongchedi.com/article/7591987756226658841
www.dongchedi.com/article/7591989742904820249
www.dongchedi.com/article/7591988304665920025
www.dongchedi.com/article/7591987384788009497
www.dongchedi.com/article/7591987725625197081
www.dongchedi.com/article/7591979709920346649

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/30 23:44:27

AI如何简化ST-LINK UTILITY调试流程

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个AI辅助的ST-LINK UTILITY增强工具&#xff0c;能够自动解析调试日志&#xff0c;识别常见错误模式&#xff08;如连接失败、Flash写入错误等&#xff09;&#xff0c;并提…

作者头像 李华
网站建设 2026/1/30 23:44:25

ARM64异常模型详解:入门级深度剖析

ARM64异常模型详解&#xff1a;从零开始的深度实战解析你有没有遇到过这样的场景&#xff1f;系统突然“卡死”&#xff0c;串口打印出一串神秘的日志&#xff1a;Exception Level: EL1 ESR_EL1: 0x25600000 (Data Abort, Translation Fault) ELR_EL1: 0xffffff80081a3c24 SPSR…

作者头像 李华
网站建设 2026/1/30 23:44:24

1小时搭建:基于YOLO的智能零售检测原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速开发一个基于YOLO的零售商品识别原型系统。系统需要能够识别货架上的商品&#xff08;如饮料瓶、零食包装等&#xff09;&#xff0c;并统计商品数量和位置。要求包含&#xf…

作者头像 李华
网站建设 2026/1/30 23:44:22

电商系统开发:解决订单查询CURSOR中文乱码实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 生成一个电商订单查询系统的代码片段&#xff0c;重点解决CURSOR中文显示问题。要求&#xff1a;1. 使用Python Flask框架&#xff1b;2. 连接MySQL数据库查询订单数据&#xff1b…

作者头像 李华
网站建设 2026/2/1 2:40:14

使用VibeVoice-WEB-UI构建自动化语音生产流水线

使用VibeVoice-WEB-UI构建自动化语音生产流水线 在播客内容爆炸式增长的今天&#xff0c;一个制作精良的节目动辄需要数小时录音、多轮剪辑和专业配音。但你有没有想过&#xff0c;一段长达90分钟、包含四位角色自然对话的音频&#xff0c;可以仅靠输入一段文本&#xff0c;在2…

作者头像 李华
网站建设 2026/1/30 23:44:16

1小时打造TELNET服务监控看板:低代码方案实践

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个简易TELNET监控看板&#xff1a;1) 配置监控IP和端口列表&#xff1b;2) 定时自动检测服务状态&#xff1b;3) 可视化展示在线/离线状态&#xff1b;4) 异常告警功能。使用…

作者头像 李华