当涉及typedef时,使用从右至左规则解释变量声明时遇到麻烦。
在C ++入门第五版中,我看到了以下代码:
typedef char *pstring;
const pstring cstr = 0; // cstr is a constant pointer to char
const pstring *ps; // ps is a pointer to a constant pointer to char
如果我将pstring替换为char *,则它是这样的:
const char *cstr
所以我希望cstr是指向const char的指针。但是书中的评论指出指针本身是恒定的。我的问题是我的思维方式出了什么问题。
答案 0 :(得分:2)
typedef
不是宏。您不只是用文字替换它。
将其读取为cstr
是“常量pstring
”,它是“常量(指向char的指针)”。将此与const char*
(它是指向常量char
的指针)进行比较。
如果要替换typedef,它将如下所示:
char* const cstr = 0;
char* const* ps;
答案 1 :(得分:1)
如here所示:
如果使用const类型限定符声明了数组类型(通过 使用typedef),则数组类型不是const限定的,但是其类型 元素类型为
因为pstring是char *
的typedef,所以const pstring cstr
是char * const cstr
,而不是const char * cstr
。