当包含typedef时,如何用从右到左的规则解释变量声明?

时间:2019-04-01 18:27:11

标签: c++ c typedef

当涉及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的指针。但是书中的评论指出指针本身是恒定的。我的问题是我的思维方式出了什么问题。

2 个答案:

答案 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 cstrchar * const cstr,而不是const char * cstr