Skip to content

关键字

typedef

用于给已有类型取别名,typedef关键字后可能接一长段,遵循正常声明变量声明的语法,变量的名字即为别名,例如:

 //声明一个长度为3的float数组类型,别名为point3
typedef float point3[3];   
point3 p;     //创建一个长度为3的float数组p

//声明一个别名为point的整型
typedef int point;
point p;

存在以下特别的情况:

  • 结构体

结构体本身就是自定义类型,在C++中可以像用别名一样直接用结构体名创建对象,为结构体取别名通常是为了兼容老代码(在C中,创建结构体对象必须用struct+结构体名作为类型名),且和声明语法有所区别:

//声明一个别为PointSet的结构体
typedef struct point{int x;int y;}PointSet;

不必像简单的数据结构一样把类定义写在typedef后,在完整的类定义后使用typedef+类名+别名即可。

class RenderWindowSystem{...}
typedef RenderWindowSystem Window;

//声明对象
Window myWin;

Union

联合体,允许在同一段内存中存储不同的数据类型中的一种,其长度是所有允许类型中最长的长度。

它有以下特点:

  • 本质是一个结构体
  • 它的左右成员相对于基地址的偏移量都是0
  • 此结构的空间需要足够容纳最长的成员
  • 内存对齐方式需要适用于所有成员