美文网首页
第二章 引用

第二章 引用

作者: 活出好样 | 来源:发表于2021-11-21 10:59 被阅读0次

    1、引用:

    1.引用必须初始化,指针可以不初始化,但是这样很危险,因为它会变成一个未定义变量,没初始化便去使用的话,dangerous!!

    2.引用只能指向初始化的对象,而指针的话可以改变指向。(说白了引用就是指针常量!)

    3.引用类型必须是一个对象,而且类型必须保持相同

    double a=3.14;
    int &r1=a;//错误
    double &r2=a;//正确
    

    2、const

    1.const修饰的值,不能去改变,其实也就是自己约法三章,不能通过该值改变

    const int a=10;
    a=20;//错误
    
    int a=20;
    const  int b=a;
    a=30;//这种操作又是可以的,可怜了绿帽b
    

    2.const的例外情况:

    1. 将const引用绑定到非常量的对象,字面值,甚至是一个一般表达式

    int a=10;
    const int &r1=a;
    const int &r2=10;
    const int &r3=r1*2;
    int &r4=r1;//错误
    

    上述1、2、3例子,其中发生的情况是:(其实也只在数据类型不一样的时候才有temp,都是int依旧没戏)

    double a=3.14;
    const int&r1=a;//这种情况是可行的
    //以下是编译器做出的处理
    const int temp=a;//编译器创建了一个临时的const int temp
    const int & r1=temp;//也就是用了一个临时的temp变量
    

    如下图 第二次输出仍然是3,而不是赋值后的20,说明确实只改变了上述的temp临时变量
    注意!!!!如果说是int a 然后const 引用指向它 改变a的值的话 并不会额外创建一个temp!!


    r1自己给自己约法三章,不允许自己去修改

    如果说const绑定的是一个非const的引用,只要它指向的对象类型相同,那还是不会创建一个新的temp变量,只有类型不同的时候才会创建一个temp值,如下图r1改变了,a改变了,r2仍然没有改变


    只有引用类型不匹配的时候,编译器才会做临时变量处理。

    相关文章

      网友评论

          本文标题:第二章 引用

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