(注:本文轉載自http://my.oschina.net/sasa/blog/7921)
const引用可讀不可改,與綁定對象是否爲const無關,注意區分const引用與對const對象的引用
非const引用可讀可改,只可與非const對象綁定
const int ival = 1024;
const int &refVal = ival; // ok: both reference and object are const
int &ref2 = ival; // error: nonconstreference to aconst object
非const引用只能綁定到與該引用同類型的對象。
const引用則可以綁定到不同但相關的類型的對象或綁定到左值。
const引用可以初始化爲不同類型的對象或者初始化爲右值,如字面值常量:
int i = 42;
// legal for const references only
const int &r = 42;
const int &r2 = r + i;//同樣的初始化對於非const引用卻是不合法的,而且會導致編譯時錯誤。
double dval = 3.14;
const int &ri = dval;
編譯器會把這些代碼轉換成如以下形式的編碼:
int temp = dval; // create temporary int from thedouble
const int &ri = temp; // bind ri to that temporary
const int t = 9;
const int& k = t;
cout<<&k<<endl;
cout<<&t<<endl;
輸出是
0012FF6C
0012FF74
int t = 9;
int& k = t;
cout<<&k<<endl;
cout<<&t<<endl;
輸出是
0012FF74
0012FF74