const引用與非const引用

(注:本文轉載自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

如果是對一個常量進行引用,則編譯器 首先建立一個臨時變量,然後將該常量的值置入臨時變量中,對該引用的操作就是對該臨時變量的操作。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章