對C 中const T 含義的理解

2021-07-22 06:05:35 字數 1430 閱讀 3992

這裡的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,...