1.在typedef中使用指针往往会带来意外的结果。如下:
typedef string *pstring; const pstring cstr;
绝大数人刚开始都会认为cstr是一种指针,它指向const对象,即const pstring cstr 等价于const string *cstr,其实,这是不对的,错误的原因在于单纯地将typedef当做文本扩展了。
首先,我们要认识到pstring它是一个类型,表示的是指向string的指针。声明const pstring时,const修饰的是pstring这个类型本身(修饰的是指针),两者结合起来,即表示指向string的const指针这种类型。最后用const pstring类型来修饰标识符cstr,表明cstr是一个指向string的const指针。原定义可写为:string *const cstr。
其实,我们不需要每次都分析的这么痛苦,因为,在C++中const限定符既可以放在类型前,也可以放在类型后:
string const s1; // s1 and s2 have same type, const string s2; // they're both strings that are const
所以,下次遇到这样不确定的类型判断时,就const放在诸如pstring类型的后面即可,转换为pstring const cst;
2.用typedef简化指向多维数组的指针
typedef类型定义可使指向多维数组元素的指针更容易读、写和理解。以下程序用typedef为数组ia的元素类型定义新的类型名:
int ia[3][4]; typedef int int_array[4]; int_arry *ip = ia;