const引用可讀不可改,與綁定對象是否爲const無關,注意區分const引用與對const對象的引用編碼
非const引用可讀可改,只可與非const對象綁定spa
const int ival = 1024;orm
const int &refVal = ival; // ok: both reference and object are const對象
int &ref2 = ival; // error: nonconst reference to a const object編譯器
非const引用只能綁定到與該引用同類型的對象。編譯
const引用則能夠綁定到不一樣但相關的類型的對象或綁定到左值。class
const引用能夠初始化爲不一樣類型的對象或者初始化爲右值,如字面值常量:dva
int i = 42;變量
// legal for const references onlyobject
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 the double
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