const引用與非const引用

 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

若是是對一個常量進行引用,則編譯器 首先創建一個臨時變量,而後將該常量的值置入臨時變量中,對該引用的操做就是對該臨時變量的操做。
相關文章
相關標籤/搜索