一个typedef声明为一个已存在的类型,而不是为一个新的类型创建一个别名。因此,typedef只给出类型安全性的假象。结果,在接口中typedef带来的坏处远远多于好处。
请看图1-4所示的类Person。我们已经决定在Person类的内部嵌套typedef声明,以避免影响全局名字空间,并且使它们更容易被找到。将SetWeight成员函数定义为一个以“Pounds”为单位的体重参数,同时getHeight方法返回以“Inches”为单位的身高。
可惜,嵌入的typedef并不比在文件作用域内声明的typedef提供更多的类型安全。
Inches和Pounds这两个类型名在结构上是相等的,因此完全可以互换。这些typedef全然没有编译时的类型安全,还让人很难知道其实际的类型。
然而,当涉及定义复杂的函数参数时,typedef确实有其存在的意义。例如,
将PCPMFDI声明为一个指针类型,指向一个const person成员函数,将它的参数设置为double类型,并返回一个int类型的返回值。在定义数据成员时,typedef也是很有用的,因为跨越不同的编译器和计算机硬件时,在定义的数据成员中必须保持常量的大小不变(见10.1.3节)。