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

c++数据结构之c++11(二)

一.再探左右值引用

1.左右值引用的优势(面试题!!!!!!!!)

①.减少拷贝,提升效率。

②.左值引用可以对参数或者返回值进行修改。

2.左值引用的缺憾以及解决方案

①.缺憾

②.解决方案

Ⅰ.用输出型参数,即把返回值放到参数列表里。

劣势在于可读性差。

Ⅱ.编译器优化传值返回(c++11出现前的优化)

一代优化:

把拷贝两步并作一步,省去临时对象,调函数,用str给ret拷贝构造,一次到位。

二代优化:

很激进,直接省去了拷贝构造,让函数返回值变成ret的别名,相当于直接用函数构造ret

但编译器优化可操作的空间很小,到二代几乎就是极限了。

Ⅲ.新标准(前情参见c++11(一)的右值引用的使用场景部分)

这里补充一下整个过程:

③.c++11出现前后(有无移动构造与移动赋值),解决方案的对比

有移动构造与移动赋值以后,既确保的可读性(形式上与之前走拷贝构造的代码相同),也增加了效率。

④.哪些对象适合实现移动构造与移动赋值?

深拷贝的自定义类型不仅要把数据搬过来,还要涉及空间交换,因此开销很大,有必要实现移动构造和移动赋值。而浅拷贝的自定义类型的拷贝是逐字节拷贝,开销与移动构造和移动赋值相差不大,因此不需要实现。

3.引用折叠

那么折叠引用的规则就是:两次引用都必须是右值引用,才能让最终引用结果为右值引用。

用武之地:

当T为int&时,对x引用的结果是左值引用;T为int&&时,对x引用的结果是右值引用。所以无论T是左值引用,还是优质引用,通过折叠引用,T&& x都能接收。而当T为普通类型,例如int时,不发生折叠引用,此时对x的引用就只是右值引用。

所以以后写函数模板的参数时,写一个T&&,就可以通过引用折叠,既可以实例化成左值版本,也可以实例化成右值版本,增加了通用性。

推导:

但在实际运用的过程中,是不需要传模板参数类型的,只需要给个实参,系统就能自动推导最终引用是哪一种引用。

4.完美转发

①.退化

②.完美转发

http://www.jsqmd.com/news/978789/

相关文章:

  • 基于STM32+超声波+舵机雷达测距可视化系统
  • 告别nc:用Postman和Wireshark调试你的C++ WebServer,效率提升不止一点点
  • RPA 机器人流程自动化在财务部门的实战应用
  • 《MySQL 慢查询优化:从 10 秒到 10 毫秒的实战指南》
  • Horizon 8连接服务器证书配置避坑指南:从AD CS部署到模板权限的那些细节
  • 你的第一个高性能WebServer雏形:用epoll实现单线程Reactor模型(ET模式详解)
  • 别再死记硬背了!用‘相亲匹配’的故事5分钟搞懂Transformer里的Q、K、V
  • spring boot_04@Bean扫描+@Bean注册
  • 从《柯南》变声器到百万调音师:用Python+Librosa实现变调、EQ与混响的保姆级教程
  • 2026年6月知名的民用船舶加工厂家推荐,船舶舵叶结构件/核电安全设备/分离压力容器/工程民用船舶,民用船舶厂家有哪些 - 品牌推荐师
  • 从《柯南》变声器到小黄人:手把手教你用Python实现实时变调(附WSOLA代码)
  • ​毕业季-你真的会用 Word 格式刷吗?​
  • Halcon算子参数里的三个冒号(:)到底怎么用?新手避坑指南与实战解析
  • 扫地机器人全通信方式详解 - SPI(Serial Peripheral Interface)
  • Transformer也能玩转高光谱图像分类?SpectralFormer保姆级解读与PyTorch复现指南
  • 别再硬改CSS了!Element Plus的el-table样式,用这3个官方API更优雅
  • GPT-5.2在形式化验证中的工程优化实践
  • GritLM:用一个 LLM 既做 embedding 又做生成
  • STM32F103C8T6串口一键升级BootLoader工程(Keil MDK可直接编译运行)
  • 别再折腾源码编译了!Windows 10/11 下用预编译包5分钟搞定GDAL环境(附Python绑定验证)
  • 2026年6月目前优秀的不锈钢板现货厂家推荐,不锈钢板定制厂家,质量上乘,品质有保障的钢板 - 品牌推荐师
  • 用PyTorch从零搭建ResNet34:手把手教你理解残差块与梯度消失的解决之道
  • 矿物显微照片AI识别工具包:含训练代码、模型转JS及网页实时预测功能
  • 超越QFIL GUI:命令行dump高通设备eMMC全分区的实战与参数详解
  • 保姆级教程:用QFIL工具备份高通手机eMMC分区(附system.xml配置详解)
  • 告别卡顿!手把手教你将TUM RGBD的tgz包转成30Hz流畅ROS Bag(附Python脚本)
  • 2026年小型熔炼机专业品牌TOP5排行:立式淬火机/立柱移动式伺服数控淬火机床/贵金属熔炼小型熔炼机/贵金属熔炼柜式熔金机/选择指南 - 优质品牌商家
  • WHMCS对接易支付(萌支付)的即用型插件包,含支付、回调与配置文件
  • 从原理图到数据:手把手教你用STM32同时读取多个DS18B20的温度
  • 智谱清言粘贴到 word 格式混乱难题破解,AI 导出鸭实现版式精准还原与稳定输出