C++: 引用和移动语态

1.       引用:

引用可以理解为变量的别名。(此处提到的变量既包括定义的局部变量,全局变量等,也包括程序中用到的临时变量,中间变量)

提到引用就需要提到左值和右值的概率,这也是对变量的分类。

左值和右值:

故名思意,可以放在等号左边的变量叫做左值,书中的定义是可以获取其地址的一个量,个人认为这种定义不合适(常量可以取地址)。确切的说应该是可以放在等号左边被赋值的一个带有名称的量或者对象。书中给出右值的定义是除了左值之外所有的量,更确切的理解是,文本常量,临时值,临时对象,匿名对象。

 

理解了左值和右值,又引入,左值引用和右值引用。

左值引用就是对左值取引用,符号&,左值引用可以理解为左值的别名,其与指针不同不需要分配内存,对引用的修改即是对变量的修改。

指针的“*”操作称为解引用,指针解引用和引用的区别就是指针和引用的区别。两者有本质的不同。指针解引用的过程也是指针取得变量引用的过程,因此这个操作也可以叫做取内容。

右值引用就是对右值取引用,符号&&,其原理是接管右值的内存地址,避免因右值(临时对象,临时变量,匿名对象)的释放,究其深层原因是防止因参数赋值造成的额外开销和资源浪费(内存,CPU),同样也可以避免类类型的浅出拷贝。

 

2.       移动语态:

移动语态是基于右值引用产生的概念。移动语态和右值引用的思路基本吻合,防止因拷贝产生的额外开销和程序错误。对于某些对象的复制,如果没有编写单独的拷贝构造函数或重载赋值操作符,可能无法深拷贝(deep copy),浅拷贝(shallow copy)会造成程序运行错误。所以需要编写移动构造函数或者重载移动赋值运算符,此二者的性能要优于拷贝构造函数和重载赋值操作。C++中的移动操作语句std::move();

 

由于右值引用是C++ 11标准支持,因此右值引用和移动语义都是C++ 11的内容。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值