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

05 C++语言---左值右值

c++98:

左值(lvalue) :表达式结束后依然存在的持久对象。

右值(rvalue) :表达式结束后就不再存在的临时对象。

左值-->左值引用

右值-->右值引用

C++11

拥有身份 (identity):可以确定表达式是否与另一表达式指代同一实体,例如通过比较它们所标识的对象或函数的(直接或间接获得的)地址;

可被移动:移动构造函数、移动赋值运算符或实现了移动语义的其他函数重载能够绑定于这个表达式。

纯右值:不拥有身份、可被移动

        1、纯右值不具有多态:他标识的对象的动态类型始终是

        2、非类非数组的纯右值不能有 cv 限定

        3、纯右值不能具有不完整类型

        4、纯右值不能具有抽象类类型或它的数组类型

将亡值:拥有身份、可被移动

左值:拥有身份、不可被移动

        1、可以使用取地址&获取地址。可以使用赋值操作,可以初始化左值引用。

泛左值:拥有身份

        1、泛左值可以通过左值到右值、数组到指针或函数到指针隐式转换转换成纯右值

        2、泛左值可以是多态的:它标识的对象的动态类型不必是该表达式的静态类型。

        3、泛左值可是是不完整类型。

右值:可被移动

        1、右值不能由内建的取址运算符取地址

        2、右值不能用作内建赋值运算符及内建复合赋值运算符的左操作数

        3、右值可以用来初始化 const 左值引用,这种情况下该右值所标识的对象的生存期被延长到         该引用的作用域结尾。

        4、右值可以用来初始化右值引用,这种情况下该右值所标识的对象的生存期被延长到该引用  的作用域结尾。

        5、当被用作函数实参且该函数有两种重载可用,其中之一接受右值引用的形参而另一个接受 const 的左值引用的形参时,右值将被绑定到右值引用的重载之上(从而,当复制与移动构造函数均可用时,以右值实参将调用它的移动构造函数,复制和移动赋值运算符与此类似)。


http://www.mrgr.cn/news/20110.html

相关文章:

  • 数据分析:R语言计算XGBoost线性回归模型的SHAP值
  • 异步编程学习
  • 应用层协议HTTP
  • 钢琴灯品牌排行榜前十名有哪些?钢琴灯品牌排行榜前十名
  • 【ubuntu使用笔记】nvme磁盘挂载失败问题记录
  • 九盾叉车U型区域警示灯,高效照明和安全警示
  • Github配置ssh key
  • C1-2 ABB二次SDK开发——手把手教登录对应的机器人控制器(图片引导操作)登录机器人控制器和刷新机器人列表
  • vue中oninput和@input区别
  • 5.关于Deformable Detr
  • 【计算机视觉前沿研究 热点 顶会】ECCV 2024中目标检测有关的论文
  • 数据库编程——sqlite3
  • Android ADB实现COC夜世界自动打资源
  • 某云彩SRM2.0任意文件下载漏洞
  • 【附指定环境安装包】在Visual Studio Code中配置Python环境!
  • OpenAI 联合创始人的 AI 安全公司 SSI 筹集 10 亿美元资金|TodayAI
  • Linux - Linux安装部署Maven以及环境变量配置
  • 基于Pytorch深度学习——Transformer论文讲解/代码实现
  • 园区/高能耗企业 水-电-气-热-油采集系统-能源管理系统
  • 在 Ubuntu 下通过 Docker 部署 Minecraft 服务器