10 引用

2020-10-20  本文已影响0人  ca8519be679b

基本使用

本质就是给变量起别名,格式   数据类型 &变量名 = 原变量名;

1

如上,我们定义int &p = a;相当于p,a都是相同变量且内存地址一致,我们修改p,也等于修改a

引用注意事项

引用必须初始化,否则报错,即引用创建必须告诉是谁的别名

2

第二个需要注意的是引用一旦初始化,就不可以修改指向其他变量

3

即引用一旦初始化不可修改地址,但是大小是可以变换的

引用作为参数传递给函数

我们知道指针传递可以实现修改实参,比如交换方法,这里也可以用引用来实现

4

这里虽然是形参,但因为是别名,所以实现了修改

引用作为函数返回类型

首先,和返回局部变量地址一样,不建议返回局部变量引用,因为这块区域虽然可能被保留,但是会被其他程序劫持

5

如上,第一个还是能保留的,第二个却因为释放而不能显示10的值,注意方法执行结果使用引用接收

6

所以我们一般对引用设置为静态的,让其放在全局区,就不会有栈空间的问题

7

因为函数结果返回引用,所以我们此时是可以作为左值的,并且实现了对内存的修改,如上

引用的本质就是指针常量

注意不是常量指针,我们之前讲过,指针常量,指向不能改变,和引用一样,所以引用int &ref =a;本质就是int *const ref = &a;我们使用值,本质就是帮我们解引用了

8

常量引用

引用本身是地址不可修改,然后常量const修饰,连值都不能修改,就变成只读了

9

比如上图,我们尝试去使用引用来作为10的别名,但是会报错

10

但是我们加上const修饰就不会报错,如上,这里相当于编译器给我们做了int temp = 10;const int &a = temp;当然常量引用不是仅用于此,重要的是限制形参,反之引用传参时误修改形参,导致实参改变

11

如上是没有const修饰的,直接实现了修改实参

12

当使用const修饰,就会告诉我们不要修改这个参数。有人又会说了本身不用引用,就不会修改实参,也许说的对,如果对象的空间大,那么形参就会开辟额外的空间,但是使用引用不会,因为还是使用已有的空间

上一篇下一篇

猜你喜欢

热点阅读