在前面我們說過划栓,引用的類型必須與其所引用的對象的類型相同巩检,但是有個例外初始化常量引用的時候允許任意表達式作為初始值刊苍,只要該表達式能轉(zhuǎn)化為引用的類型
即允許一個常量引用綁定到一個非常量對象施籍、字面值共啃、甚至是一個一般表達式上:
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; //雙精度浮點數(shù)生成一個臨時的const int對象
const int &ri = temp; //ri綁定了這個臨時變量