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

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

  • 相关阅读:
    分享24款非常有用的 jQuery 插件
    分享30个最佳WordPress电子商务主题
    使用 CSS3 可以实现的五种很酷很炫的效果
    记录一些常用的python库、软件或者网址
    树的遍历
    深度优先遍历怎么抓住小偷
    hash算法的应用
    mysql的一些常用操作(一)
    Serverless 2.0,鸡蛋还是银弹?
    基于 KubeVela 与 Kubernetes 打造“无限能力”的开放 PaaS
  • 原文地址:https://www.cnblogs.com/UnknowCodeMaker/p/11119471.html
Copyright © 2011-2022 走看看