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引用初始化後,將生成一個只讀變量