在 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
本文探讨了在C/C++中使用typedef定义指针时常见的误解。通过一个实例解释了const修饰符在指针声明中的作用,并澄清了人们对于const修饰的是指针本身还是指针所指向的对象这一常见误区。
1526

被折叠的 条评论
为什么被折叠?



