匿名使用者
匿名使用者 發問時間: 電腦與網際網路程式設計 · 2 0 年前

將參照初值設為某常數物件位址的程式碼解惑

將reference初值設為某const object位址:

const int ival=1024;

const int *const &pi=&ival;

能解說程式碼第二行為何是如此嗎?

我以為是const int *&pi=&ival;就好,

為啥中間還要加一個const,

其含意為?

已更新項目:

To jisarea

你的意思是說:

第一個const代表指向[常數物件]的指標,

第二個const代表const reference。

可是第二個const的用法好似跟常數指標的表示法一樣,

那如果問題改為指標也設為常數指標那要怎麼寫?

1 個解答

評分
  • 2 0 年前
    最佳解答

    因為 &ival 會產生一個暫時指標存放 ival 的位址

    而你要 reference 一個暫時物件調件就是用一個 const reference

    2005-11-18 補充:

    首先, 關於這句的兩個 const 關鍵字 const int *const &pi=&ival

    第一個 const 是修飾 pointer 所指的物件必須是 const

    第二個 const 是修飾 reference pi 所 reference 的物件型態 const

    &ival 代表取出 ival 的位址, 放在型態為 const int * 的暫時變數

    如果你用指標來接位址的話, 只要將 pi 宣告成 const int * 即可

    當然你也可以把它宣告成常數指標 const int * const 沒有影響

    但是如果你用上面的 reference 去參考它, 請注意你的原宣告是

    一個 reference 去參考一個指標, 這是它那樣宣告的原意, 但是

    存有 ival 位址值的指標是一個暫時變數, 你要 reference 它的話

    必須是一個 const reference ( a reference to const variable) 才可以

    你可以做一個實驗: int &ri = 5 跟 int const &ri = 5 那個才能編譯

    你也可以再做實驗: cout << pi 跟 cout << &ival 兩個值是否相同

    相信一切應可明瞭.

    :)

還有問題?馬上發問,尋求解答。