3

对于我的一生,我找不到一个很好的解释来解释什么是用于将 typedef 转换为 C++ 语句的规则。我理解的简单案例。但考虑一下Danny Kalev的观点:

typedef char * pstr;
int mystrcmp(const pstr, const pstr); //wrong!

丹尼·卡列夫接着写道:

序列 const pstr 实际上表示 char * const(指向 char 的 const 指针);不是 const char *(指向 const char 的指针。

我在任何地方都找不到解释为什么“const pstr”会转换为“char * const”的规则。

谢谢你的帮助。

4

2 回答 2

5

这是因为pstr是 的别名char*,当你这样做时const pstr有点像说const (char*)而不是(const char)*

于 2012-05-22T16:06:45.130 回答
3

typedef 不像宏。它不只是执行简单的文本替换。typedef 定义了单个单元,附加单元const适用于整个事物。定义的单元是一个指针,所以应用const它会给你一个 const 指针。

您期望的结果将需要const“到达内部”pstr类型以应用于内部事物。在该类型中声明的指针级别越多,情况会变得更糟。考虑typedef char*** pppstr。要使其成为 a char const***const必须在类型的深处插入三层pppstrconst不管类型定义有多复杂,规则始终适用于外部级别会更好。

于 2012-05-22T16:11:04.893 回答