const引用可以用不同型別的物件初始化(只要能從一種型別轉換到另一種型別即可),也可以是不可定址的值,如文字常量,例如:
同樣的初始化對於非const引用是不合法的,將導致編譯錯誤。原因如下。
引用在內部存放的是乙個物件的位址,它是該物件的別名。對於不可定址的值,如文字常量,以及不同型別的物件,編譯器為了實現引用,必須生成乙個臨時物件,引用實際上指向該物件,但使用者不能訪問它。例如,當我們寫:
編譯器將其轉換成:
如果我們給ri賦乙個新值,則這樣做不會改變dval,而是改變temp。對使用者來說,就好像修改動作沒有生效。
const引用不會暴露這個問題,因為它們是唯讀的。不允許非const引用指向需要臨時物件的物件或值,一般來說,這比「允許定義這樣的引用,但實際上不會生效」的方案要好。
下面是在打算修正pi_ref定義時首先想到的做法,但是該定義不能生效。
如果從右向左讀這個定義,會發現pi_ref是指向乙個定義為const的int型物件的指標,我們的引用不是指向乙個常量,而是指向乙個非常量指標,指標指向乙個const物件。
正確的定義如下:
指標和引用有兩個主要區別:引用必須總是指向乙個物件。如果用乙個引用給另乙個引用賦值,那麼改變的是被引用的物件而不是引用本身。
C 學習路線1 const用法
const說明的型別是常型別,而且定義後不能被更改。const常量具有型別,編譯器可以進行安全檢查 define巨集定義沒有資料型別,只是簡單的字串替換,不能進行安全檢查 可以節省空間,避免不必要的記憶體分配 1.對於指向常量的指標,不能通過指標來修改物件的值。2.不能使用void 指標儲存cons...
C 回顧(1) const的用法
說明 const是屬於左結合的型別修飾符,這裡只講怎麼使用。1 const 變數 定義const變數 常量 const int value1 1 value1不可變 int const value2 2 value2不可變 2 const與指標 const int p str1 p str1 不可變...
C 程式設計之關鍵字 1 Const
1 c 中const有什麼用?不要一聽到const就說是常量,這樣給考官一種在和乙個外行交談的感覺。應該說 const 修飾的內容不可改變就行了,定義常量只是一種使用方式而已,還有const引數,const資料成員,const成員函式,const返回值等,被const修飾的東西都受到強制保護,可以預...