C++引用

引用

引用就是为一个对象起另外一个名字
  • 定义引用:在标识符前加上&,就表示定义了该变量是一个引用,例如:

    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所在的内存地址出进行赋值操作,由此可以看出引用的本质就是指针,只不过编译器
在生成代码的时候做了一些工作,使得操作引用等同操作原对象一样

注意:对一个引用取地址即可得到所引用变量所在的内存地址

原文地址:https://www.cnblogs.com/UnknowCodeMaker/p/11119471.html