对于我的生活,我无法找到用于将typedef转换为C ++语句的规则的详细解释。我理解的简单案例。但请考虑Danny Kalev:
typedef char * pstr;
int mystrcmp(const pstr, const pstr); //wrong!
然后Danny Kalev写道:
序列const pstr实际上是指char * const(一个指向char的const指针); 不是const char *(指向const char的指针。
我找不到任何规则来解释为什么“const pstr”会被转换为“char * const”。
感谢您的帮助。
答案 0 :(得分:5)
这是因为pstr
是char*
的别名,当你const pstr
时,有点像const (char*)
而不是(const char)*
。
答案 1 :(得分:3)
typedef不像宏;它不只是执行简单的文本替换。 typedef定义了一个单元,附加const
适用于整个事物。定义的单位是一个指针,因此将const
应用于它会给你一个const指针。
您期望的结果需要const
“到达内部”pstr
类型才能应用于内部内容。在该类型内声明更多指针级别会变得更糟。考虑typedef char*** pppstr
。要使其成为char const***
,const
必须在pppstr
类型中插入三层深。无论类型定义到底有多复杂,规则最好始终将const
应用于外层。