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

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

  • 相关阅读:
    Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放
    Npm install failed with “cannot run in wd”
    JQuery使用deferreds串行多个ajax请求
    使用HTML5的History API
    Christmas Trees, Promises和Event Emitters
    Node.js开发者最常范的10个错误
    Mongoose Schemas定义中timestamps选项的妙用
    Ubuntu上安装Robomongo及添加到启动器
    [nodemon] Internal watch failed: watch ENOSPC错误解决办法
    介绍两个Ubuntu上的桌面小工具
  • 原文地址:https://www.cnblogs.com/UnknowCodeMaker/p/11119471.html
Copyright © 2011-2022 走看看