为啥下面这种写法没法typedef指向const对象的指针

const string* str1 = new string("hello");pstring str2 = str1;
■网友
首先感谢各位抽时间回答这个问题。如下是自己研究了一下这个问题,整理了下心得,望各位大神不吝赐教。其实提问里面有一点写错了。typedef const string * pstring;const string *str1 = “hello”;\t//无法编译通过,const char *的只能不用初始化const string *的指针pstring str2 = \u0026amp;str1; //无法编译通过,const string **的指针不能被pstr初始化问题的本意如下,但是阴差阳错的多加了个*变成上面的代码导致无法编译通过。其实写成如下是可以编译通过并运行的。typedef const string * pstring;const string str1 = “hello”;pstring str2 = \u0026amp;str1;这个提问的本来目的是想研究一下typedef和指针的类型重定义的问题typedef const string * pstring;const string str1 = “hello”;const string str2;pstring str3 = \u0026amp;str1;str3 = \u0026amp;str2;\t//允许修改指针地址str3 = \u0026#39;x\u0026#39;;\t//编译失败,不能通过const string *类型的指针修改该指针指向的对象的值,证明pstring为typedef重定义的const string *指针类型。轮子哥 @vczh 的示例直接new了一个string对象并且用str1指向它,str2也指向“hello”。const string * str1 = new string("hello");pstring str2 = str1;继续加上如下测试代码。const string str3;str2 = \u0026amp;str3;\t//允许修改指针地址str2 = \u0026#39;x\u0026#39;;\t//编译失败,不能通过const string *类型的指针修改该指针指向的对象的值,证明pstring为typedef重定义的const string *指针类型。总结一下,关于typedef和指针的定义问题。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已经是指针了,为什么还要取地址?


    推荐阅读