news 2026/7/26 8:13:45

现代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/7/26 3:48:19

零基础理解驻点:从概念到简单应用

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式驻点学习应用&#xff0c;包含&#xff1a;1.驻点概念动画讲解 2.可调节参数的函数示例 3.实时计算和显示驻点 4.练习题自动批改 5.学习进度跟踪。使用Jupyter Note…

作者头像 李华
网站建设 2026/7/26 8:29:44

语音克隆功能会加入吗?VibeVoice未来路线图猜测

VibeVoice未来会加入语音克隆吗&#xff1f;技术演进与应用前瞻 在播客制作人熬夜剪辑多角色对白、有声书创作者为不同人物配音而反复录制的今天&#xff0c;一个能“听懂对话逻辑”并“自然切换说话人”的AI语音系统&#xff0c;几乎成了内容生产者的梦中情技。微软开源的 Vib…

作者头像 李华
网站建设 2026/7/23 10:59:56

NGROK在企业远程办公中的5个典型应用场景

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 设计一个企业级NGROK应用方案&#xff0c;包含以下功能&#xff1a;1) 安全的远程SSH访问配置 2) 内网Web服务暴露方案 3) 数据库临时远程访问设置 4) 多用户权限管理 5) 使用情况…

作者头像 李华
网站建设 2026/7/23 11:00:34

GLM-4.6V-Flash-WEB模型对冻土带建筑物沉降的图像监测

GLM-4.6V-Flash-WEB模型在冻土带建筑沉降监测中的图像智能应用 在青藏高原的无人区&#xff0c;一座科研站的地基正悄然发生着变化——春季回暖导致多年冻土开始融化&#xff0c;墙体出现了细微倾斜。传统巡检人员每季度才能抵达一次&#xff0c;而等到问题被发现时&#xff0c…

作者头像 李华
网站建设 2026/7/23 1:14:51

利用CHROME历史版本进行跨浏览器测试

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个自动化测试环境配置工具&#xff0c;能够一键安装指定版本的CHROME浏览器&#xff0c;并与Selenium等测试框架集成。支持并行运行多个版本测试&#xff0c;生成兼容性报告…

作者头像 李华
网站建设 2026/7/23 1:02:26

RAGFLOW:AI如何革新知识检索与代码生成

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个基于RAGFLOW的智能代码助手应用&#xff0c;能够根据开发者输入的自然语言描述&#xff0c;自动检索相关代码片段和文档&#xff0c;并生成符合要求的代码。应用需支持多种…

作者头像 李华