C++11中的右值引用

引用的概念:

  C++98中首次提出了引用的概念,引用即别名。引用变量与其引用实体共用同一块存储空间,而引用的底层是通过指针来实现的,因此使用引用,可以提高程序的可读性。

引用的特性:
1.引用在定义时必须初始化。

2.一个变量可以有多个引用。

3.引用一旦引用一个实体,在不能引用其他实体。

为了提高程序的运行效率,C++11中引入了右值引用,右值引用也是别名,但其只能对右值引用。

那么到底什么是右值?

通常我们以等号“=”来区别右值和左值,等号左边的为左值,但是等号右边的却不一定是右值。

int a=10; int & b=a;   这种称之为左值引用。

int a=9;

int && ra=10;   //右值引用

 

int b=30;

int && rb= b;   这种是错误的

C++11中规定如果需要引用左值必须加上关键字move进行左值的修饰

如:int &&rb=(move)b;

左值与右值的区别

1.普通类型的变量,因为有名字,可以取地址,都认为是左值。

2.const修饰的常量,不可修改,只读类型的,理论上应该按照右值对待,但因为其可以取地址(如果只是const类型常量的定义,编译器不给其开辟空间),C++11认为其是左值。

3.如果表达式的运行结果是一个临时变量或者对象,认为是左值。

4.如果表达式运行结果或单个变量是一个引用则认为是左值。

结论:

1.不能简单的通过是否放在=左右两侧或者取地址来判断左值或者右值吧,要根据表达式的结果或变量的性质判断。

2.能得到引用的表达式一定能作为引用,否则就用常引用。

 

普通引用只能引用左值,不能引用右值,const引用既可引用左值,也可引用右值

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值