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

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