C++中const修饰引用

1、普通引用

① int i = 3; 

     int &ri = i;    //正确,引用绑定到int 变量i上

② double d = 3.1415;

    int &rd = d;   //错误, 引用类型为 int ,所绑定对象类型为 double,类型不一致

③ int & rm = 3; //错误, 普通引用必须绑定到对象,不能绑定至常量

2、const修饰引用

① const int &ci = 3; //正确,整型字面值常量绑定到 const引用
//c++编译器  会  分配内存空间  ,c++编译器把ci放在符号表中
   //  int  temp  =  3 
   //  const  int  &ci  =  temp;

②
1) int i = 1;
    const int &cj = i;    //正确,非常量对象绑定到 const引用
    //cj=2;// 错误 cj被const修饰,不可以改变
    i=3;//正确,i可以被修改,cj也被更改,cout<<cj时为3
    int &cj2 = i; 
    cj2=5;//正确,i被修改,cj也被更改,cout<<cj时为5


2) double i= 1.2;
    const int &cj = i;    //正确,非常量对象绑定到 const引用
    //cj=2.3;// 错误 cj被const修饰,不可以改变
    i=3.3;//正确,i可以被修改,cj没有被更改,cout<<cj时为1
    double &cj2 = i; 
    cj2=5.2;//正确,i被修改为5.2,cj2被更改,为5.2,cj没有被更改,cout<<cj时为1


原因:引用变量类型为int,被引用对象类型为double。
在进行const int &cj = i;前,进行了如下操作
 double i= 1.2;
 int temp = i;
 const int &cj = temp;//所以cj并未真正绑定对象i



③ const int i = 4; 

    const int &ck =  i; //正确,常量对象绑定到 const引用

④ const int i = 5;

    int &r = i;    //错误,常量对象绑定到非const引用

结论:

const 引用的目的是,禁止通过修改引用值来改变被引用的对象。
1)const int & e 相当于 const int * const e
2)普通引用 相当于 int *const e
3)当使用常量(字面量)对const引用进行初始化时,C++编译器会为常量值
分配空间,并将引用名作为这段空间的别名
4)使用字面量对const引用初始化后,将生成一个只读变量

借鉴:https://blog.csdn.net/qnavy123/article/details/82183586

https://blog.csdn.net/qq_39584315/article/details/80333738

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章