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

“c++11“,右值,右值引用,可变参数模板...

博主c++学习笔记,碎碎念:

本篇适合稍稍了解了右值引用,但还想看看别人是怎么想的人。

主要有关于右值理解,移动语义,完美转发;可变参数模板,lambad,包装器,后续还会写一下智能指针部分的笔记。

“第一次学c++11部分知识都是大半年前了,现在才把笔记补上,QAQ,”

关于列表初始化,太简单了,看一遍就懂了没必要记录;


右值,右值引用,移动语义,完美转发

个人理解:

值类别 - cppreference.com,右值概念

c++11引入了“右值引用”概念,为了什么?

假如你要设计一个class类,它既要深拷贝的拷贝构造,又要浅拷贝的拷贝构造(当一个对象里面的资源需要转移的时候),是不是很尴尬?

你要面临的是自己设计一套成员函数啥的去满足,代码会很丑陋,而且使用的时候还得分出一份精力去考虑是深拷贝还是浅拷贝,并且联动STL标准库的时候更难受了,c++11之前STL标准库的构造仅有左值引用的深拷贝,和你造的这个class结合到一块使用只能调用拷贝构造(比如vector的拷贝构造调用了你写的这个class的拷贝构造,但你压根都没拷贝构造,你为了深拷贝和浅拷贝,都另外设计了一套成员函数),这又要逼迫你去继承STL标准库,然后去扩展你的这套深拷贝,浅拷贝的成员函数以实现,正确的调用(深拷贝成员函数调用深拷贝成员函数,浅拷贝成员函数调用浅拷贝成员函数)。以上你辛辛苦苦实现了之后还要面对日常使用上的美观损失,实在是遭罪。

ps赋值拷贝也是如此,(不要想着一个赋值用浅拷贝,拷贝构造用深拷贝,有些人设计的时候赋值直接就是调用的拷贝构造)

好在c++11引入右值引用解决了这个问题,即提升了效率,又使代码变得美观了。

c++11之后,类里面多了“移动构造和移动赋值构造”,长下面这样:

ClassName(ClassName&& other) {// 转移资源// 释放other的资源
}ClassName& operator=(ClassName&& other) {if (this != &other) {// 释放当前对象的资源// 转移资源// 释放other的资源}return *this;
}

多了个&&的新符号,它就是与&相对的右值引用,接下来,看一看右值的概念(纯右值和将亡值值类别 - cppreference.com 和前面的链接是一样的)你就会豁然开朗,


移动语义就是上面的转移资源的“浅拷贝”,

完美转发的出现是因为右值引用产生的变量是左值,这在层层扩展包装的c++中,不能将这个右值引用产生的变量,直接传递到下一层(因为它算左值,直接传递,下一层就错误了,本该是调用右值的那个,反而错误的调用了左值的版本),解决这个的方法称为完美转发,

std::forward<T>(arg) //argument 参数的简写,遇得到看不懂命名的要查,

好了剩下的都很简单,不写了,


可变参数模板

简单的写一下博主自己想要记的:

递归处理。

  • (GetArg(args)...) 会将参数包展开,生成一系列 GetArg 函数的调用,例如 GetArg(arg1), GetArg(arg2), ...
  • 可以使用 ... 来展开参数包。例如,sum(args...) 会将参数包 args 展开为多个参数,传递给 sum 函数。

剩下的lambad,包装器,知识点不多,写了和别人的也一模一样,鸽了,

智能指针先鸽了

相关文章:

  • Clickhouse基于breakpad生成minidump文件,方便问题定位
  • 二维码批量识别—混乱多张二维码识别-物品分拣—-未来之窗-仙盟创梦IDE
  • 强化学习中的策略评估与改进:从理论到实践(二)
  • zabbix 重置登录密码
  • Android Compose 层叠布局(ZStack、Surface)源码深度剖析(14)
  • Webug4.0靶场通关笔记11- 第15关任意文件下载与第16关MySQL配置文件下载
  • 力扣每日一题 ​838. 推多米诺​
  • VS调试技巧
  • Ubuntu 24.04 完整Docker安装指南:从零配置到实战命令大全
  • 【2025软考高级架构师】——案例分析总结(13)
  • 学习黑客分析案例
  • 基于stm32的四旋翼飞行器:MPU6050讲解 · 上(参数读取)
  • C语言中,sizeof关键字(详细介绍)
  • java Servlet Session 本身局限性解决方案
  • 【libuv】基于libuv的exe链接错误
  • Kubernetes(k8s)学习笔记(四)--入门基本操作
  • AI 采用金字塔(Sohn‘s AI Adoption Pyramid)
  • Linux操作系统从入门到实战(五)详细讲解Linux权限概念
  • Python Django基于小波变换的数字水印技术实现系统【附源码、文档说明】
  • Docker —— 技术架构的演进
  • 马斯克的“星舰基地”成为新城镇,首任市长为SpaceX员工
  • 严正交涉!我驻日使馆:如日方采取新的挑衅举动,中方必坚决反制
  • 孙一凡的东欧狂想音乐会:一场穿越东欧的听觉绮梦
  • 以色列消防部门:已控制住耶路撒冷山火
  • 当农民跨进流动的世界|劳动者的书信①
  • 不准打小孩:童年逆境经历视角下的生育友好社会