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

C++笔记-C++11(二)

紧接上文,我们在介绍了移动构造和移动赋值时仅仅只介绍了函数返回值的情况,那么什么场景还会用到呢?我们接着往下看:

3.5.4右值引用和移动语义在传参中的提效

通过查看STL文档中的一些容器如vector,list,我们可以看出在他们中push和insert系列接口在C++11中引入了右值引用的版本。

这些信息就体现在我们现在要讲的在传参上的体现,同时也告诉我们当参数是一个左值时,容器内部继续调用拷贝构造进行拷贝,将对象拷贝到容器空间中的对象;当对象是一个右值时,容器内部则调用移动构造,右值对象的资源到容器空间的对象上。

我们看这几个例子,在传参时也同样调用了相应的拷贝构造和移动构造。

上面我们是利用了stl库中的list来控制我们自己写的string类,下面我们来尝试写出list中的push_back和insert中对右值引用的相关操作:

下面以我们之前在list的章节自己实现list的为例,这里就不展示全部的代码了。

这是我们对之前写的list所进行的修改,这里注意我们在参数部分虽然用了右值引用,但是上节我们讲了变量表达式均为左值,所以我们在复用传参时还要注意将变量表达式通过move函数强转为右值,不然还是会调用左值的拷贝构造函数,并且少一个都不行。

这是没有问题的list,和我们调用库中的一样,但是:

这里我就把ListNode中的构造函数少写了move函数来将参数强转为右值,通过上图可以看出结果发生了改变,只调用了左值的拷贝构造函数,所以我们在自己联系时一定要注意这点。

3.6类型分类

1.C++11以后,进⼀步对类型进⾏了划分,右值被划分纯右值(pure value,简称prvalue)和将亡值

(expiring value,简称xvalue)。

2. 纯右值是指那些字⾯值常量或求值结果相当于字⾯值或是⼀个不具名的临时对象。如: 42 、

true 、 nullptr 或者类似 str.substr(1, 2) 、 str1 + str2 传值返回函数调⽤,或者整形 a 、 b , a++ , a+b 等。纯右值和将亡值C++11中提出的,C++11中的纯右值概念划分等价于C++98中的右值。

3. 将亡值是指返回右值引⽤的函数的调⽤表达式和转换为右值引⽤的转换函数的调⽤表达,如move(x) 、 static_cast<X&&>(x)。4.泛左值(generalized value,简称glvalue),泛左值包含将亡值和左值。

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

相关文章:

  • ORAN部署避坑指南:如何根据O-RU的延迟配置(T2a_min_up, Ta3_max)来规划你的O-DU时间窗
  • 2025届必备的六大降重复率网站实际效果
  • 别再只加依赖了!解决Java NoClassDefFoundError的3个高阶思路与工具
  • Linux显卡驱动开发语言逐渐转向Rust
  • LongCat-Image:轻量化扩散模型在AIGC中的高效应用
  • bypy文件对比终极指南:快速找出本地与百度云差异
  • 2026年3月结束机优质厂家推荐,打包机/全自动打捆机/全自动打包机/结束机/打捆机,结束机制造厂家口碑推荐 - 品牌推荐师
  • 构建agent调用skill:构建完成skill之后我怎么构建agent调用skill
  • 如何用RPG Maker MZ和免费素材打造一款有‘电影感’的独立游戏?聊聊光影与叙事结合
  • 别再瞎导入了!用Maya/ZBrush建模后,这样设置才能让Marvelous Designer完美识别你的角色模型
  • 星铁速溶茶:崩坏星穹铁道自动化脚本终极指南
  • 项目实战:当RS485模块没到时,我是如何用RS422模块应急调试STM32通信的
  • ESP8266改造宜家PM2.5传感器实现智能监测
  • Blackview MP80迷你主机评测:N97性能与多屏办公体验
  • Python逆向工程入门:用dis模块‘透视’你的.pyc文件
  • 告别格式错误:手把手教你准备ROSE分析所需的GFF和BAM文件(附脚本和检查清单)
  • 5分钟轻松获取Grammarly Premium高级版Cookie:智能自动化工具完全指南
  • WaltzRL框架:解决大型语言模型安全对齐的双智能体协同方案
  • LinkSwift网盘直链下载助手:告别限速,八大网盘一键高速下载
  • C++笔记-C++11(三)
  • 我用 ChatGPT 新功能“走进”了三个房间,出来后沉默了五分钟
  • 从社交网络到推荐系统:『握手定理』和『二分图』到底是怎么在背后起作用的?
  • 掌握AI教材编写技巧,借助低查重AI写教材工具,轻松完成教学用书!
  • Rockchip Android设备开机动画“第二屏”定制指南:从uboot到kernel的logo替换全流程
  • 别再memcpy了!手写C++ Vector时,二维数组拷贝为何总出错?深度解析深浅拷贝陷阱
  • taotoken为独立开发者提供稳定可靠的大模型api服务
  • Keil5 C51开发避坑指南:从新建工程到STC-ISP下载,解决LED闪烁不明显的常见问题
  • 仅剩最后47份!《Python工业故障预测高保真仿真框架v2.3》——含数字孪生接口、OPC UA直连模块与FMEA联动引擎
  • 别再乱找了!人脸识别入门,这5个经典数据集(CASIA WebFace、CelebA等)的保姆级下载与使用避坑指南
  • AntiMicroX:免费开源的手柄映射工具,让所有PC游戏都支持游戏控制器