10 引用

作者: ca8519be679b | 来源:发表于2020-10-20 00:45 被阅读0次

    基本使用

    本质就是给变量起别名,格式   数据类型 &变量名 = 原变量名;

    1

    如上,我们定义int &p = a;相当于p,a都是相同变量且内存地址一致,我们修改p,也等于修改a

    引用注意事项

    引用必须初始化,否则报错,即引用创建必须告诉是谁的别名

    2

    第二个需要注意的是引用一旦初始化,就不可以修改指向其他变量

    3

    即引用一旦初始化不可修改地址,但是大小是可以变换的

    引用作为参数传递给函数

    我们知道指针传递可以实现修改实参,比如交换方法,这里也可以用引用来实现

    4

    这里虽然是形参,但因为是别名,所以实现了修改

    引用作为函数返回类型

    首先,和返回局部变量地址一样,不建议返回局部变量引用,因为这块区域虽然可能被保留,但是会被其他程序劫持

    5

    如上,第一个还是能保留的,第二个却因为释放而不能显示10的值,注意方法执行结果使用引用接收

    6

    所以我们一般对引用设置为静态的,让其放在全局区,就不会有栈空间的问题

    7

    因为函数结果返回引用,所以我们此时是可以作为左值的,并且实现了对内存的修改,如上

    引用的本质就是指针常量

    注意不是常量指针,我们之前讲过,指针常量,指向不能改变,和引用一样,所以引用int &ref =a;本质就是int *const ref = &a;我们使用值,本质就是帮我们解引用了

    8

    常量引用

    引用本身是地址不可修改,然后常量const修饰,连值都不能修改,就变成只读了

    9

    比如上图,我们尝试去使用引用来作为10的别名,但是会报错

    10

    但是我们加上const修饰就不会报错,如上,这里相当于编译器给我们做了int temp = 10;const int &a = temp;当然常量引用不是仅用于此,重要的是限制形参,反之引用传参时误修改形参,导致实参改变

    11

    如上是没有const修饰的,直接实现了修改实参

    12

    当使用const修饰,就会告诉我们不要修改这个参数。有人又会说了本身不用引用,就不会修改实参,也许说的对,如果对象的空间大,那么形参就会开辟额外的空间,但是使用引用不会,因为还是使用已有的空间

    相关文章

      网友评论

          本文标题:10 引用

          本文链接:https://www.haomeiwen.com/subject/fzqhmktx.html