左值、右值和引用

左值

一个左值是一个标识非临时性对象的表达式,一般的法则是,如果程序中有一个变量名,那么它就是一个左值,而不管变量是否可被修改。

右值

一个右值是一个标识临时性对象的表达式,或者是一个不与任何对象相联系的值(如字面值常数)

引用

引用类型允许我们为一个已存在的值定义新的名字。在传统C++中引用一般只能是一个左值的名字,在C++11中可以有两种类型的引用:左值引用和右值引用。

左值引用

C++11中,左值引用的声明是通过在某个类型后放置一个符号&来进行的,此时的左值引用成为了它所引用的对象的同义词(别名)。

string str = "hell";
string &rstr = str; //rstr是str的另一个名字
rstr += 'o'; //str变为"hello"
bool cond = (&str == &rstr); //true,str和rstr是同一对象
string &bad1 = "hello" //非法,"hello"不是可修改的左值
string &bad2 = str + ' '; //非法, str+' '不是左值
string & sub = str.substr(0, 4); //非法,str.substr(0, 4)不是左值

右值引用

C++11中,右值引用是通过在某个类型后放置一个符号&&而被声明的。右值引用与左值引用具有相同的特征,不同于左值引用的是,右值引用也可以引用一个右值(临时性的变量)

string str = "hell";
string && bad1 = "hello"; //合法
string && bad2 = str + ' '; //合法
string && sub = str.substr(0, 4); //合法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值