C++11:右值引用

        引用在c++代码的编写过程之中使用的频率可谓是非常之高,除了我们所熟知的指针引用、const引用、普通的引用(用"&"声明)之外,C++11 中新增了一种引用——右值引用。

一、定义

        右值引用(rvalue reference),可指向右值,使用&&来声明,只能引用临时变量和常量值,并且右值引用的值可以被修改,主要是为类的移动语句做准备的。

        代码演示:

#include<iostream>
#include<string>
using namespace std;

int main()
{
	double a = 3.14;
	//double& a1 = a * 2 + 3;//报错,普通引用不能引用临时变量
	double&& a2 = a * 2 + 3;//用右值引用来引用临时变量

	double&& b = sqrt(97);//用右值引用来引用临时变量

	cout << "a2=" << a2 << ",b=" << b << endl;    

    a2=4.44;
    b=5.55;
    cout << "a2=" << a2 << ",b=" << b << endl;

	return 0;
}

        运行结果:

         ​

二、右值引用与其他引用的区别

        1.const引用与右值引用的区别

        const引用可引用普通左值、const左值、右值,并且不能被修改,数据属性为只读。

        代码演示:

#include<iostream>
#include<string>
using namespace std;

int main()
{
	int a = 66;
	const int b = 11;

	//const引用
	const int& ca = a;//const引用,引用普通左值
	const int& cb = b;//const引用,引用const左值
	const int& c = 90;//condt引用,引用右值
	cout << "ca=" << ca << ",cb=" << cb << ",c=" << c << endl;

	//ca = 13;//error!!!报错,const引用的值不可以被修改
	//cb = 90;//error!!!报错,const引用的值不可以被修改
	//c = 12;//error!!!报错,const引用的值不可以被修改

	//右值引用
	//int&& ra = a;//error!!!报错,右值引用不能引用普通左值
	//int&& rb = b;//error!!!报错,右值引用不能引用const左值
	
	int&& d = a * 4;//右值引用,引用临时变量
	int&& e = 30;//右值引用,引用常量
	cout << "d=" << d << ",e=" << e << endl;

	d = 12;//右值引用的值可以被修改
	e = 89;//同上
	cout << "d=" << d << ",e=" << e << endl;

	return 0;
}

        运行结果:

        

        2.普通引用与右值引用的区别

        普通引用只能引用普通左值,并且普通引用的值可以被修改,当普通引用的值被修改后,与之对应的左值也随之被修改。

        代码演示:

#include<iostream>
#include<string>
using namespace std;

int main()
{
	int a = 66;
	
	//普通引用
	/*int& pa;//所有的引用在定义时都必须进行初始化
	pa = a;*/
	int& pa = a;
	cout << "a=" << a << ",pa=" << pa << endl;

	pa = 100;//普通引用的值可以被修改,并且与之对应的左值也随之被修改
	cout << "a=" << a << ",pa=" << pa << endl;


	int&& b = a * 4;//右值引用,引用临时变量
	int&& c = 30;//右值引用,引用常量
	cout << "b=" << b << ",c=" << c << endl;

	b = 12;//右值引用的值可以被修改
	c = 89;//同上
	cout << "b=" << b << ",c=" << c << endl;

	return 0;
}

        运行结果:

        

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值