今天开始复(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