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

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

  • 相关阅读:
    【方法1】删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录
    hdu3415 Max Sum of Max-K-sub-sequence 单调队列
    HBase总结(十八)Hbase rowkey设计一
    Makefile生成器,使用C++和Boost实现
    quartz cron表达式在线生成
    NS3网络仿真(6): 总线型网络
    连载:面向对象葵花宝典:思想、技巧与实践(35)
    zoj 2921 Stock(贪心)
    11g RAC 加节点 之 手动加入vip 资源
    [Unity3D]Unity+Android交互教程——让手机"动"起来
  • 原文地址:https://www.cnblogs.com/UnknowCodeMaker/p/11119471.html
Copyright © 2011-2022 走看看