c++之左值引用和右值引用

一、左值与右值定义
左值与右值这两概念是从 c 中传承而来的,在 c 中,左值指的是既能够出现在等号左边也能出现在等号右边的变量(或表达式),右值指的则是只能出现在等号右边的变量(或表达式).

在 c 语言中,通常来说有名字的变量就是左值(如上面例子中的 a, b),而由运算操作(加减乘除,函数调用返回值等)所产生的中间结果(没有名字)就是右值,如上的 3 + 4, a + b 等。我们暂且可以认为:左值就是在程序中能够寻值的东西,右值就是没法取到它的地址的东西(不完全准确)

二、左值引用与右值引用(引用即别名)

int i=0;//简单的赋值语句
int &j=i;//正确,左值引用

((i>0) ? i : j) = 1;//右值也可以出现在赋值表达式的左边,
//但是不能作为赋值的对象,因为右值只在当前语句有效,赋值没有意义。

int &k=10;//错误,左值引用只能引用左值表达式,10是常量-右值
const int &l=10;//正确,特殊。。左值引用常量

int &&m=i+5;//正确,右值引用
int &&n=m;//错误,m是一个右值引用变量,是个左值

int &&a=1;和const int &a=1;是完全一样的操作,先在数据区开辟一个值为1的无名整型量,再将引用a与这个整型量进行绑定。但是右值引用直接支持rebind.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值