右值引用

右值引用是C++11提出的新概念,通过这些操作,可以降低拷贝带来的消耗

左值和右值

左值一般位于赋值号的左边,指的是一个对象本身,或者是一个持久的值,可以被多次引用和使用。例如赋值的返回值、下标操作、解引用以及前置递增等。左值必须在内存中有实体。

右值是一个短暂的值,代表对象的值,一般不可以引用,只在当前的表达式中有效。比如一个表达式的求值结果、函数返回值以及一个字面值等。(不一定是赋值号右边的值)右值可以存在于内存中或CPU寄存器中。

一个对象被用作右值时,使用的是它的内容,被用作左值时,使用的是它的地址。


引用

引用相当于变量的别名,实质上和指针一样,C++中用引用替代了指针。

引用的基本规则:

  • 引用声明时,必须进行初始化,一旦绑定,不可以在绑定其他对象。
  • 对引用的操作,就相当于是对原对象的操作。

一般地,一般引用称为左值引用,用&表示,数据类型 & 引用名 = 左值表达式;

必须绑定到右值的引用称为右值引用,用&&表示,数据类型 && 引用名 = 右值表达式。

例子:

左值引用:

int main()
{
	int a = 10;  //a为左值(变量),10为右值(短暂的)
	int &b = a;  //b为左值引用,a为左值表达式
	//int &b = a+1;  //错误,左值表达式初始化不能为临时值,a+1位临时值
	cout<<"a= "<<a<<endl;
	cout<<"b= "<<b<<endl;	

	b = a+1;  //初始化之后,可以用右值表达式对左值引用进行修改,对b进行修改,实际上a也修改了。
	
	cout<<"a= "<<a<<endl;
	cout<<"b= "<<b<<endl;
	return 0;
}


右值引用:

int main()
{
	int a = 10;  //a为左值(变量),10为右值(短暂的)
	int &&c = a+5;  //c为右值引用,a+5为右值表达式,只在当前表达式中有效。
	int &&d = 20;  //d位右值引用,初始化时,必须要用一个右值表达式,20也是右值表达式

	cout<<"a= "<<a<<endl;  //10
	cout<<"c= "<<c<<endl;  //15
	cout<<"d= "<<c<<endl;  //20

	c = a;  
	d = a;  //初始化之后,可以用左值表达式的值修改右值引用所引用的临时变量的值
	cout<<"c= "<<c<<endl;   //10
	cout<<"d= "<<d<<endl;   //10

	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值