1、对于‘’&‘,这个字符’,大家都很熟悉,在C语言中,它是取地址的意思,在位运算中,它是‘与’的意思,今天要说的就是在C++中,引用的意思
2、对于我这个一直用C语言编程的小白来说,一看到&这个字符便会想到取地址的意思,以至于很多时候都不理解为什么在定义函数的形式参数时,要定义成“取地址”,后来经查资料 ,才知道是取地址的意思,然而,在看到这个字符时,首先想到的还是取地址的意思
3、在C语言中,指针是其灵魂,但是在进行编程开发时,90%的工程师基本上都是栽在指针的问题上,比如,内存泄漏就是其经常出现的现象,因此,在后续的研发时 ,不提倡使用指针,那么这时如何采用一种方法来代替指针呢?作为C语言的升级版C++,很好的解决了这个问题,那就是‘’引用‘’
4、引用和指针的区别:
▲ 指针在定义时,可以不初始化,而引用在定义时,必须初始化
▲指针变量指向的地址可以根据需要动态修改,而引用只要和某个变量绑定后就不能修改
▲指针本身需要4个字节存放地址,而引用本身不用分配内存空间
▲使用sizeof求指针变量的大小总是4个字节,表示地址所占的空间是4个字节,而sizeof引用的大小不是固定的,其大小与所
引用的源头变量有关
5、引用的简介:
引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
引用的声明方法:类型标识符 &引用名=目标变量名;
eg: int & kk = pa; //定义引用kk,它是变量pa的引用,即别名
注意:
(1)&在此不是求地址运算,而是起标识作用。
(2)类型标识符是指目标变量的类型。
(3)声明引用时,必须同时对其进行初始化。
(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。
kk=1; 等价于 pa=1;
(5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。
(6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。
6、引用的应用:
(1)引用作为参数:
引用的一个重要作用就是作为函数的参数。以前的C语言中函数参数传递是值传递,如果有大块数据作为参数传递的时候,采用的方案往往是指针,因为 这样可以避免将整块数据全部压栈,可以提高程序的效率,那么在C++中,就由引用替代了这里指针的作用
void swap(char & p1,char & p2)
{
char tmp;
tmp = p1;
p1 = p2;
p2 = p1;
}
(2)常引用
常引用声明方式:const 类型标识符 &引用名=目标变量名;
用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性。
const int & pa;
(3)引用作为返回值
要以引用返回函数值,则函数定义时要按以下格式:
类型标识符 &函数名(形参列表及类型说明)
{函数体}
说明:
(1)以引用返回函数值,定义函数时需要在函数名前加&
(2)用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。
(4)、引用和多态
引用是除指针外另一个可以产生多态效果的手段。这意味着,一个基类的引用可以指向它的派生类实例。