C++语言程序设计:c++11之左值引用和右值引用
小标 2018-06-15 来源 : 阅读 771 评论 0

摘要:在C++语言程序设计中,c++11中增加了右值引用和move语义来避免一些不必要的构造和copy操作,以此来提升程序的运行效率。希望对大家学习C++语言程序设计有所帮助。

在C++语言程序设计中,c++11中增加了右值引用和move语义来避免一些不必要的构造和copy操作,以此来提升程序的运行效率。希望对大家学习C++语言程序设计有所帮助。

首先说左值和右值,他们绝不是简单的等号左边和右边的区别,总结来说:

  1 .左值可以寻址,而右值不可以。

  2 .左值可以被赋值,右值不可以被赋值,可以用来给左值赋值。

  3 左值可变,右值可变(仅对基础类型适用,用户自定义类型右值引用可以通过成员函数改变)。

  例:int a = 1;左值a可以被寻值,右值1不可以 ,左值a可以被赋值,1不可以,a可变1不可变,int a = b + c,同理a左值,b+c右值。最后c++11中还有一个将亡值的概念,是c++11中新增的跟右值引用相关的表达式,这样的表达式通常是将要被移动的对象。其实标准库中有三个函数帮我们判断引用,左值引用和右值引用: std::is_rvalue_reference<class _Tp>::value,std::is_lvalue_reference<<class _Tp>>::value,std::is_reference<class _Tp>::value

    左值引用就是对左值的引用类型,用T & a来表示,右值引用是对右值的引用类型,用T &&a来表示,左值引用和右值引用同为引用,他们在声明的同时必须被初始化。他们的初始化绑定有一定的规则和限制,例如一个非常量左值引用不能绑定一个常量左值。具体规则如下:

  C++语言程序设计:c++11之左值引用和右值引用

    这里我们可以看到常量左值引用是可以绑定右值的,其实这在c98中已经存在,只是我们平时没有留意这个细节而已,例如const int&a = 1等,那么他和const int a = 1,有什么不同呢,从语法上讲后者的右值在表达时结束后就销毁了,而前者不会。这就是我们尽量用const 引用代替值传递做函数参数的原因,它在某种程度上可以提高效率。

    那么右值引用有什么用呢?看一个例子。T&& a = ReturnValue(); 当我们调用一个返回一个右值的函数时,当函数返回后,函数返回的右值生命周期也就结束了,但是当我们通过一个右值引用来接收时,该右值有重新获生命,只要我们的右值引用a存在,该右值也同时存在,这又有什么用呢,当我们使用T a = ReturnValue();这样的方式来接收时,会多一次对象的析构和构造,首先用函数返回值构造b,然后函数返回值生命期结束析构。而右值引用则不会,因为右值引用直接绑定了函数返回的右值。

    总结生面两段话,左值引用和右值引用座位函数参数都能避免对象的拷贝和构造,但是我们通过右值引用改变一个右值时是没有意义的,而我们通过左值引用改变一个左值是有意义的。

    以上就介绍了C/C+的相关知识,希望对C/C+有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程