引用
引用就是为一个对象起另外一个名字
-
定义引用:在标识符前加上&,就表示定义了该变量是一个引用,例如:
int nTest = 0; int & nrTest = nTest;
注意:
- 定义引用时要进行初始化,否则编译时会报错
- 对一个变量的引用赋值,等同于对这个变量赋值
- 虽然有多级指针,但是没有多级引用,无法定义引用的引用
引用的本质
测试代码如下:
int main() { int nNum = 0; int * pNum = &nNum; int & rNum = nNum; *pNum = 4; rNum = 4; return 0; }
对应的汇编代码如下:
int nNum = 0;
002713D8 mov dword ptr [nNum],0
int * pNum = &nNum;
002713DF lea eax,[nNum]
002713E2 mov dword ptr [pNum],eax
int & rNum = nNum;
002713E5 lea eax,[nNum]
002713E8 mov dword ptr [rNum],eax
*pNum = 4;
002713EB mov eax,dword ptr [pNum]
002713EE mov dword ptr [eax],4
rNum = 4;
002713F4 mov eax,dword ptr [rNum]
002713F7 mov dword ptr [eax],4
return 0;
002713FD xor eax,eax
可以看出使用指针对nNum进行赋值,和使用引用进行赋值,两者的汇编代码是相同的,都是
往nNum所在的内存地址出进行赋值操作,由此可以看出引用的本质就是指针,只不过编译器
在生成代码的时候做了一些工作,使得操作引用等同操作原对象一样
注意:对一个引用取地址即可得到所引用变量所在的内存地址