在前面我们说过,引用的类型必须与其所引用的对象的类型相同,但是有个例外初始化常量引用的时候允许任意表达式作为初始值,只要该表达式能转化为引用的类型
即允许一个常量引用绑定到一个非常量对象、字面值、甚至是一个一般表达式上:
int i = 42;
const int &r1 == i; //允许const int绑定到一个普通的int对象上
const int &r2 = 42; //r2是一个常量引用
conts int &r3 = r1 * 2; //r3是一个常量引用
int &r4 = r1 * 2; //错误:普通引用不能绑定到常量引用
实际上,当一个常量引用被绑定到另外一种类型上的时候:
double dval = 3.14;
const int &ri = dval;
上述代码在编译器中的形式是:
double dval = 3.14;
const int temp = dval; //双精度浮点数生成一个临时的const int对象
const int &ri = temp; //ri绑定了这个临时变量