初始化常量引用时,不再硬性要求引用的类型必须与所引用对象一致,例如:
double a=3.14;
const int &x=a;
//这样初始化不会报错,而且引用x也不是指向a
因此会有一个临时量的概念,很好的解释了这一初始化特例,在常量引用初始化时,实际上过程为:
double a=3.14;
const int temp=a; //此时temp为整型,得到的对象temp值为3是个常量
const int &x=temp; //常量引用指向temp这一临时量
引用x指向了一个未命名的整形常量,这个对象被称为临时量。对于非常量引用来说,也有上述过程,但非常量引用是希望改变绑定对象的,既然要改变绑定对象,那么这一临时量的存在不仅使绑定数值发生了变化,而且将要改变的对象也发生了改变,因此不允许引用类型不一致,常量引用是一个特例。