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引用初始化后,将生成一个只读变量