const的引用


const的引用

對常量的引用:把引用綁定到const對象上,就像綁定到其他對象上一樣,不能被用作修改它所綁定的對象:

const int ci = 1024;
const int &r1 = ci;//正確:引用及其對應的對象都是常量 
r1 = 42;//錯誤:r1是對常量的引用
int &r2 = ci;//錯誤:試圖讓一個非常量引用綁定一個常量

因為不允許直接為ci賦值,所以也就不能通過引用去改變ci。

初始化和對const的引用

初始化常量引用時允許任意表達式作為初始值,只要該表達式的結果能轉換成引用的類型,允許為一個常量引用綁定非常量的對象、字面值,甚至是個一般表達式:

int i = 42;
const int &r1 = i;//允許const int&綁定到一個普通int對象上
const int &r2 = 42;//正確:r1是一個常量引用
const int &r3 = r1 * 2;//正確:r3是一個常量引用
int &r4 = r1 * 2;//錯誤:r4是一個非常量引用

 當一個常量引用被綁定到另外一種類型上:

double dval = 3.14;
const int &ri = dval;

ri引用了一個int型的數,對ri的操作應該是整數運算,但dval卻是一個雙精度浮點數而非整數,為了確保讓ri綁定一個整數,編譯器把上述代碼變成如下形式:

const int temp = dval;//由雙精度浮點數生成一個臨時的整型常量
const int &ri = temp;//讓ri綁定這個臨時常量

臨時量對象:當編譯器需要一個空間來暫存表達式的求值結果時臨時創建的一個未命名的對象。

對const的引用可能引用一個並非const的對象

常量引用僅對引用可參與的操作做出了限定,對於引用的對象本身是不是一個常量未作限定:

int i = 42;
int &r1 = i;//引用ri綁定對象i
const int &r2 = i;//r2也綁定對象i,但是不允許通過r2修改i的值
r1 = 0;//r1並非常量,i的值修改為0
r2 = 0;//錯誤:r2時一個常量引用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM