這裡的t可以是系統內建型別,也可以是使用者自定義型別。
關於const和指標、引用之間的一些用法,我在博文c++中const限定符的幾種常見用法中已有說明,這裡再簡要回顧一下:
const t& const引用 只能讀取指向物件的值,但不能修改其指向物件的值
const t* 或者 t const* 指向const物件的指標 只能讀取指向物件的值,但不能修改其指向物件的值
t *const const指標 指標
本身的值不能修改
回到今天的主題,那const t*&呢?
這可能會產生兩種理解,但c++肯定只支援一種。
第一種理解是:這是t*的const引用。第二種理解是:這是const t*的引用。
以下是判斷兩種理解正確性的**:
[cpp]view plain
copy
const
int* a =
newint
(1);
int* b =
newint
(1);
const
int*& c =a;
//正確
const
int*& d =b;
//錯誤: 無法從「int *」轉換為「const int *&」
事實證明,第二種理解是正確的。我們將const t*&寫為t const*&產生同樣的結果,這說明const t*&和t const*&是等價的,都表示const t*或t const*的引用。
好的,const t*&的含義是什麼解決了,那麼,t*的const引用怎麼表示呢?
答案是:t*const& 。
顯然,t *const( const指標)的const引用也是上面這個答案。
那麼,const t*(指向const物件的指標)的const引用怎麼表示呢?想必聰明的讀者已經想到了。
答案是:t const*const& 或 const t*const&。
驗證的**我就不寫了,大家可以自行測試。
補充一點指標和typedef的內容。
眾所周知,typedef和指標一起使用會產生意外的結果,具體說來就是:
如果寫 typedef t* t_ptr;
那麼const t_ptr的真正含義是t *const而不是 const t* ,這在c++ primer中有詳細說明,不贅述。
這裡提出這個問題的原因是,我們很有可能會遇見這樣的表示:const t_ptr&。比如,這通常會出現在某些樹類資料結構的函式引數裡。必須明確的是,const t_ptr&代表的是t *const& ,即t*的const引用,所以這樣的函式接受t*型別的指標作為實參。
C 中對多型的理解
1 多型 是指類中具有相似功能的不同函式,使用同乙個名稱來實現 是對類的行為再抽象 多型是通過過載函式和虛函式來實現的。2 繼承討論的是類與類的層次關係,多型則是考慮在不同層次的類中,以及在同乙個類的內部,同名成員函式之間的關係問題,是解決功能和行為的再抽象問題。3 多型是指類族中具有相似功能的不同...
C中對指標的理解
1.定義乙個指標,有int float double等多種型別指標可定義 int p中如果p不加星號,p裡存放的是位址值,如果加了星號,表示指向之歌位址內所存放的數值。2.int float 這樣表示的是定義乙個空的指標,當使用這種方式時,一般表示要分配一段位址空間,常和malloc new搭配使用...
C 中對List集合的理解
在我們以往的儲存資料經常使用陣列,但由於陣列大小是固定的,如果有更多的資料儲存進來,就必須重新定義陣列。現在可以使用list集合儲存資料,好處是集合大小會隨著儲存資料的多少自動增加,其實根本原理也是陣列機制,乙個空的列表內部預設建立乙個大小為0的陣列,當給列表中新增元素的時候,列表的容量會擴大為4,...