typedef 定义
您可以使用 typedef 声明来定义自己的标识,可以使用这些标识来代替类型说明符,例如 int, float和 double。 typedef 声明不会保留存储器。 使用 typedef 定义的名称不是新数据类型,而是其表示的数据类型或数据类型组合的同义词。
typedef 名称的名称空间与其他标识相同。 使用 typedef 标识定义对象时,所定义对象的属性与通过显式列出与该标识关联的数据类型来定义该对象的属性完全相同。

通过使用 typedef 重新声明,您可以重新定义一个名称,该名称是同一作用域中先前的 typedef 名称,以引用同一类型。 例如:
typedef char AChar;
typedef char AChar;
任何扩展语言级别都可以启用 typedef 重新声明功能。
当任何扩展语言级别生效时, typedef 重新声明支持所有类型,包括可变修改类型。
有关可变修改类型的更多信息,请参阅 可变长度数组。

typedef 定义的示例
以下语句将
LENGTH 定义为 int 的同义词,然后使用此 typedef 将 length, width和 height 声明为整数变量:typedef int LENGTH;
LENGTH length, width, height;上述声明等同于以下声明:
int length, width, height;同样,
typedef 可用于定义 结构,并集或 C++ 类。 例如:typedef struct {
int scruples;
int drams;
int grains;
} WEIGHT;然后,可以在以下声明中使用结构
WEIGHT :WEIGHT chicken, cow, horse, whale;在以下示例中,
yds 的类型为 "指向 无参数的函数的指针,返回 int"。typedef int SCROLL(void);
extern SCROLL *yds;
在以下
typedef 定义中,令牌 struct 是类型名称的一部分: ex1 的类型为 struct a; ex2 的类型为 struct b。typedef struct a { char x; } ex1, *ptr1;
typedef struct b { char x; } ex2, *ptr2; 类型 ex1 与类型 struct a 以及 ptr1指向的对象类型兼容。 类型 ex1 与 char, ex2或 struct b不兼容。
typedef 名称必须与同一作用域中声明的任何类类型名称不同。 如果 typedef 名称与类类型名称相同,那么仅当 typedef 是类名的同义词时才能如此。在未命名的
typedef 定义中定义的 C++ 类将被指定为哑元名称。 此类类不能具有构造函数或析构函数。 请考虑以下示例:typedef class {
~Trees();
} Trees;在此示例中,未命名的类是在 typedef 定义中定义的。 Trees 是未命名类的别名,但不是类类型名称。 因此,您无法为此未命名类定义析构函数 ~Trees() ; 否则,编译器将发出错误。 

将 typedef 名称声明为友元
在 C++11 标准中,引入了扩展友元声明功能,您可以使用该功能将 typedef 名称声明为友元。 有关更多信息,请参阅 扩展友元声明。
