C++學習筆記1-const引用

    const引用可以用不同類型的對象初始化(只要能從一種類型轉換到另一種類型即可),也可以是不可尋址的值,如文字常量,例如:

    同樣的初始化對於非const引用是不合法的,將導致編譯錯誤。原因如下。

    引用在內部存放的是一個對象的地址,它是該對象的別名。對於不可尋址的值,如文字常量,以及不同類型的對象,編譯器爲了實現引用,必須生成一個臨時對象,引用實際上指向該對象,但用戶不能訪問它。例如,當我們寫:

    編譯器將其轉換成:

    如果我們給ri賦一個新值,則這樣做不會改變dval,而是改變temp。對用戶來說,就好像修改動作沒有生效。

    const引用不會暴露這個問題,因爲它們是隻讀的。不允許非const引用指向需要臨時對象的對象或值,一般來說,這比“允許定義這樣的引用,但實際上不會生效”的方案要好。

 

    下面給出的例子很難在第一次就能正確聲明。我們希望用一個const對象的地址來初始化一個引用。非const引用定義是非法的,將導致編譯時刻錯誤:

    下面是在打算修正pi_ref定義時首先想到的做法,但是該定義不能生效。

    如果從右向左讀這個定義,會發現pi_ref是指向一個定義爲const的int型對象的指針,我們的引用不是指向一個常量,而是指向一個非常量指針,指針指向一個const對象。

    正確的定義如下:

    指針和引用有兩個主要區別:引用必須總是指向一個對象。如果用一個引用給另一個引用賦值,那麼改變的是被引用的對象而不是引用本身。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章