這裡的T可以是系統內置類型,也可以是用戶自定義類型。
關於const和指針、引用之間的一些用法,我在C++中const限定符的幾種常見用法中已有說明,見http://www.linuxidc.com/Linux/2012-12/75705.htm,這裡再簡要回顧一下:
const T& const引用 只能讀取指向對象的值,但不能修改其指向對象的值
const T* 或者 T const* 指向const對象的指針 只能讀取指向對象的值,但不能修改其指向對象的值
T *const const指針 指針本身的值不能修改
回到今天的主題,那const T*&呢?
這可能會產生兩種理解,但C++肯定只支持一種。
第一種理解是:這是T*的const引用。第二種理解是:這是const T*的引用。
以下是判斷兩種理解正確性的代碼:
const int* a =new int(1);
int* b =new int(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&。
驗證的代碼我就不寫了,大家可以自行測試。