• 引用


    什么是引用?

      - 变量名:一段连续内存空间的别名
      - 引用:已定义变量的别名
    

    引用的结构

    类型 &引用名 = 目标变量名;
    

    引用的注意事项

      - &在这里不再是取地址符号。而是引用符号。相当于&有了第二种用法
      - 引用的类型必须和其绑定的变量的类型相同
      - 声明引用的同时,必须对引用进行初始化;否则编译时会报错
      - 一旦绑定到某个变量之后,就不会再改变其指向
    

    引用的本质

      C++中的引用本质上是一种被限制的指针。
        由于引用是被限制的指针,所以引用是占据内存的,占据的大小就是一个指针的大小。
        有很多的说法,都说引用不会占据存储空间,其只是一个变量的别名,但这种说法并不准确。
        引用变量会占据存储空间,存放的是一个地址,但是编译器阻止对它本身的任何访问,从一而终总是指向初始的目标单元。
        在汇编里, 引用的本质就是“间接寻址”。
    

    引用的用法

    引用作为函数参数

    #include <iostream>
    
    using std::cout;
    using std::endl;
    
    //此时,引用作为函数参数
    // int &x = a
    // int &y = b
    void swap(int &x, int &y)
    {
      int temp = x;
      x = y;
      y = temp;
    }
    
    int main()
    {
      int a = 10;
      int b = 20;
      cout << "交换前" << endl;
      cout << "a = " << a << endl;
      cout << "b = " << b << endl;
    
      swap(a, b);
      cout << "交换后" << endl;
      cout << "a = " << a << endl;
      cout << "b = " << b << endl;
      return 0;
    }
    
    指针传递,引用传递,值传递浅析
      在没有引用之前。如果想通过形参改变实参的值,只有使用指针才能达到目的。但使用指针的过程中,不好操作,很容易犯错
      引用可以作为其他变量的别名而存在,可以使用引用来代替指针,因而具有更好的可读性与实用性
      采用值传递传递参数,系统会在内存中开辟空间来存储形参变量,并将实参变量的值拷贝给形参变量,即形参变量只是实参变量的副本
      当用引用作为函数的参数时,函数中的形参会被当成实参变量或对象的一个别名来进行使用,此时,对形参的各种操作实际上是对实参本身进行操作
      当用指针作为函数的参数时,需要为形参指针在内存中分配空间
      - 建议使用引用作为函数的形参,这样会大大提高函数的时空效率
    

    引用作为函数的返回值

    引用作为函数的返回值的语法样式
    类型 &函数名(形参列表)
    {
      //函数体
    }
    
    #include <iostream>
    
    using std::cout;
    using std::endl;
    
    int func1()
    {
      int temp = 10;
      return temp;
    }
    
    /*
    int &func2()
    {
      int temp = 20;
      return temp;
    }
    */
    
    /*
    int &func3()
    {
      int *p = new int(1);
      return *p;
    }
    */
    
    int main()
    {
      int a = func1();
      //int b = func2();
      //int c = func3();
      cout << "a = " << a << endl;
      //cout << "b = " << b << endl;
      //cout << "c = " << c << endl;
      return 0;
    }
    
    引用作为函数的返回值的注意事项
      - 当以引用作为函数的返回值时,返回的变量其生命周期一定是要大于函数的生命周期的,即当函数执行完毕时,返回的变量还存在。
      - 不能返回局部变量的引用
          主要原因是局部变量在函数返回后被销毁,因此被返回的引用就成为了“无所指”的引用,程序会进入未知状态
      - 不能在函数内部返回new分配的堆空间变量的引用
          如果返回的引用只是作为一个临时变量出现。而没有被赋予一个实际的变量,那么该引用所在的空间就无法释放,会造成内存泄露
    

    引用总结

      - 在引用的使用中,单纯给某个变量取个别名是毫无意义的,引用的目的主要用于在函数参数传递中,解决大块数据或对象的传递效率和空间不如意的问题。
      - 用引用传递函数的参数,能保证参数传递中不产生副本,提高传递的效率,且通过const的使用,保证了引用传递的安全性。
      - 引用与指针的区别是,指针通过某个指针变量指向一个变量后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就目标变量的别名,对引用的操作就是对目标变量的操作
    
  • 相关阅读:
    springcloud系列五 feign远程调用服务
    ribbon负载均衡
    使用RestTemplate时报错java.lang.IllegalStateException: No instances available for 127.0.0.1
    HBase介绍
    HBase单机模式安装
    HDFS介绍及简单操作
    zookeeper三种模式安装详解(centos 7+zookeeper-3.4.9)
    zookeeper介绍
    hadoop搭建伪分布式集群(centos7+hadoop-3.1.0/2.7.7)
    linux配置本地yum源
  • 原文地址:https://www.cnblogs.com/xkyrl/p/14662720.html
Copyright © 2020-2023  润新知