c++中的左值引用与右值引用

今天开始复(xue)习(xi)c++基础了,虽然自诩程序员也有些念头了,号称懂得java、c++、python。。。总之啥火就学啥,从github上东一榔头西一棒槌的蹿出个东西就觉得了不起,然后翘着尾巴出去装逼———老子干工程,管你基本原理。然而在求职时看着那低到让人想要跳楼的AC率。。。好吧,还是开始学学吧,否则连基本的面试机会都得不到,呜呜呜,所以提升自己,改变自己就从引用开始吧。

什么是引用

变量名

要想理解什么是引用,那就先要理解什么是变量名。变量名实质上是一段连续存储空间的别名,是一个标号。程序中通过变量名来申请并命名内存空间,一段内存可以对应着多个别名

引用概念

int a=10;
int &b=a;
b=11;

引用可以看作一个已定义变量的别名,是c++对c的扩展

引用本质

在c++内部,引用是一个常指针(const type*),在编译过程中占用的空间大小与指针相同。

引用作用

声明引用的时候必须初始化,且一旦绑定,不可把引用绑定到其他对象;即引用必须初始化,不能对引用重定义;对引用的一切操作,就相当于对原对象的操作。

引用使用的注意事项

当函数返回值为引用时,若返回栈变量,不能成为其他引用的初始值,也不能作为左值使用;若返回静态变量或全局变量,可以成为其他引用的初始值,可以作为右值使用也可以作为左值使用。

常引用 (const)

常引用让变量拥有只读属性

int a=10
const int &b=a;

这时对b直接赋值b=11会报错,因为b为常引用不可更改,若要更改需要通过指针

 int *p=(int *)&b;

这时对指针p进行赋值改变

左值引用与右值引用

左值和右值

左值和右值就是在c语言中只能出现在等号左面的值和只能出现在等号右面的值。左值就是中不是右值的值,右值是可以出现在赋值表达式右边的表达式,可以是不占据内存空间的临时量或字面量,可以是不具有写入权的空间实体,左值分可读写的左值和只读左值。

int a = 3;
const int b = 5;
a = b + 2;  // a是左值,b+2是右值
b = a + 2;  // 错!b是只读的左值,无写入权,不能出现在赋值符号的左边
(a = 4) += 28; // 错! a=4是表达式,不能作为左值,28是右值,+=为赋值操作符
34 = a = 2;  // 错!34是字面量,不能作为左值
++a = 12;   // 错! ++a 是表达式,不能作为左值

左值有持久的状态,而右值要么是字面值常量,要么是表达式求值过程中创建的临时对象

左值引用和右值引用

左值引用就是引用的对象可以作为左值来使用的引用,一般所说的引用就是左值引用。右值引用就是必须绑定到右值的引用。
参考和引用:
https://www.cnblogs.com/simplepaul/p/7788009.html
https://www.cnblogs.com/xiaohzd/p/13912221.html
https://blog.csdn.net/zm_2209068178/article/details/78383379
https://www.dotcpp.com/wp/692.html
https://blog.csdn.net/u013203733/article/details/73868603
https://www.cnblogs.com/yi-mu-xi/p/9983145.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值