在 typedef 中使用指针往往带来意外的结果。 请看下面一例:
- typedef string *pstring ;
- const pstring cstr ;
请问 cstr 变量是什么类型? 简单的回答是const pstring 类型的指针,进一步来说 const pstring 代表的真实类型是什么?很多人认为真正的类型是:
const string *cstr
也就是说,const pstring是一种指针,指向string类型的const对象,但这是错误的。
错误的原因在于将typedef当作文本扩展了。声明const pstring时,const修饰的是pstring类型,这是一个指针。因此该声明语句是把cstr 定义为指向string类型对象的const指针,这个定义等价于
string *const cstr