為什麼下面這種寫法沒法typedef指向const對象的指針?
為什麼下面這種寫法沒法定義指向const對象的指針?讀C++ primer的時候看到typedef指針類型有個陷阱,搜了好多答案,沒有討論這種寫法的。因為const只能用來修飾對象而非類型,所以被編譯器忽略了?
typedef const string * pstring;const string * str1 = 「hello」;pstring str2 = str1; //無法編譯通過
const string* str1 = new string("hello");
pstring str2 = str1;
首先感謝各位抽時間回答這個問題。
如下是自己研究了一下這個問題,整理了下心得,望各位大神不吝賜教。其實提問裡面有一點寫錯了。
typedef const string * pstring;
const string *str1 = 「hello」; //無法編譯通過,const char *的只能不用初始化const string *的指針
pstring str2 = str1; //無法編譯通過,const string **的指針不能被pstr初始化
typedef const string * pstring;
const string str1 = 「hello」;
pstring str2 = str1;
typedef const string * pstring;
const string str1 = 「hello」;
const string str2;
pstring str3 = str1;
str3 = str2; //允許修改指針地址
str3[1] = x; //編譯失敗,不能通過const string *類型的指針修改該指針指向的對象的值,證明pstring為typedef重定義的const string *指針類型。
const string * str1 = new string("hello");
pstring str2 = str1;
繼續加上如下測試代碼。
const string str3;
str2 = str3; //允許修改指針地址
str2[1] = x; //編譯失敗,不能通過const string *類型的指針修改該指針指向的對象的值,證明pstring為typedef重定義的const string *指針類型。
1) 定義const指針類型 typedef string const * pstring; 此處有陷阱,typedef string * pstring; const pstring str1 等同於 string * const str1,而不是const string * str1;
2) 定義指向const對象的指針類型 typedef const string * pstring;str1已經是指針了,為什麼還要取地址?
推薦閱讀:
※編譯器如何得到內存空間?
※PEG.js中如何消除左遞歸?
※專業書籍,應該怎樣筆記?怎樣看?
※Parser Combinator 在語法解析的當中處於怎樣的位置?
※基於中間代碼的優化中 循環的查找演算法有哪些呢 循環的優化方法又有哪些?