Skip to content

关键字

typedef

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

1
2
3
4
5
6
7
 //声明一个长度为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+类名+别名即可。

    1
    2
    3
    4
    5
    class RenderWindowSystem{...}
    typedef RenderWindowSystem Window;
    
    //声明对象
    Window myWin;
    

Union

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

它有以下特点:

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