---页首---

C++ 引用

引用(Reference)

  • 在C语言中,使用指针可以间接获取、修改某个变量的值

  • 在C++中,使用引用(Reference)可以起到跟指针类似的功能

    // 引用的格式
    int age = 30;
    int &rAge = age; // rAge就是一个引用
    
  • 注意点

    • 引用相当于是变量的别名(基本数据类型、枚举、结构体、类、指针、数组等,都可以有引用)
    • 对引用做计算,就是对引用所指向的变量做计算
    • 在定义的时候必须初始化,一旦指向了某个变量,就不可以再改变,“从一而终”
    • 可以利用引用寝化另一个引用,相当于某个变量的多个别名
    • 不存在【引用的引用、指向引用的指针、引用数组】
  • 引用存在的价值之一

    • 比指针更安全、函数返回值可以被赋值
  • 引用的本质就是指针,只是编译器削弱了它的功能,所以引用就是弱化了的指针

  • 一个引用占用一个指针的大小

常引用(Const Reference)

  • 引用可以被 const 修饰,这样就无法通过引用修改数据了,可以称为常引用
  • const必须写在&符号的左边,才能算是常引用 (int const &rAge)

const引用的特点

  • 可以指向临时数据(常量、表达式、函数返回值等)
  • 可以指向不同类型的数据
  • 作为函数参数时(此规则也适用于const指针
    • 可以接收const和非const实参(非const引用,只能接受const实参)
    • 可以跟非const引用构成重载

* 当常引用指向了不同类型的数据时,会产生临时变量,即引用指向的并不是初始化时的那个变量

数组的引用

  • 常见的2种写法
    int array[] = {10, 20, 30};
    int (&ref1)[3] = array;
    int * const &ref = array;
    
    // 补充知识
    // 指针数组,数组里面可以存放3个int *
    int *p;
    int *array1[3] = {p, p, p};
    // 用于指向数组的指针
    int (*array2)[3];
    

引用的补充

  • int v1 = 10;
    int v2 = 20;
    // ref1不能修改指向,但可以通过ref1间接修改所指向的变量
    int & const ref1 = v1;
    ref1 = 30;
    // ref2不能修改指向,不可以通过ref2间接修改所指向的变量
    int const &ref2 = v1;
    // ref2 = 40; 编译不过
    // p1不能修改指向,可以利用p1间接修改所指向的变量
    int *const p1 = &v1;
    // p1 = &v2; 编译不过
    *p1 = 50;
    // p2可以修改指向,不可以利用p2间接修改指向的变量
    int const *p2 = &age;
    p2 = &v2;
    // *p2 = 60;编译不过
    
posted @ 2019-09-09 09:17  20190311  阅读(121)  评论(0编辑  收藏  举报
---页脚---