1、可以把引用绑定到const对象上,此时该引用必须是对常量的引用(简称常量引用)。对常量的引用不能被用作修改它所绑定的对象。
const int a=5;
const int &b=a;
2、允许一个常量引用绑定非常量的对象、字面值(非常量引用不行)甚至表达式(非常量引用不行),就连类型都可以不同,只要该表达式的结果能转换成引用的类型即可。
double z=3.14;
const int& a=z; //常量引用绑定非常量的对象且类型不同
const int& b=5; //常量引用绑定字面值
const int& c=2*a; //常量引用绑定表达式
出现上述情况的原因在于:上述情况下,引用实际上绑定的是一个临时量对象而非对象本身,甚至有时这个对象根本就不存在,为了初始化成功,编译器只能生成一个未命名的临时对象用于被绑定。
这一点也就解释了为什么非常量引用不能进行上述的操作。因为上述情况下,引用要绑定的是一个临时量,而正如上一节说的,临时量是const类型的,这时用非常量引用绑定常量对象显然不合法。另一方面,从使用者的角度来说,我们既然使用引用,显然是想可以通过引用改变对象的值,但这里却无法做到。
3、常亮引用绑定类型相同的非常量对象时,可以通过改变对象的值改变引用的值,这是显而易见的。
int z=10;
const int& w=z;
cout<<w<<endl; //10
z=5;
cout<<w<<endl; //5