typedef 和 enum 有什么区别

rok*_*tim 3 c++ enums typedef

我正在尝试使用 typedef 和 enum。我有两条线。以下两条线有什么区别吗?

typedef enum {UNDEFINED, POINT2D, POINT3D, CIRCLE, SQUARE, RECTANGLE, SPHERE} STYPE

enum STYPE {UNDEFINED, POINT2D, POINT3D, CIRCLE, SQUARE, RECTANGLE, SPHERE}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 5

  • 第一行定义了一个enum没有标签的对象,并给它一个名称STYPE
  • 第二行定义了一个enum名为STYPE

区别在于第一个enum没有枚举标签,而第二个有。换句话说,下面的两行都将编译为enum STYPE

STYPE s1;
enum STYPE s2;
Run Code Online (Sandbox Code Playgroud)

而只有第一行会编译为typedef enum ... STYPE.

注意: Usingtypedef在 C++ 中并不常见,因为enum会自动定义类型名称。该结构在 C 中更常见,其中enumwithouttypedef必须仅用作标记,即 withenum关键字。最后,这个结构也用在 C 中:

typedef enum STYPE {UNDEFINED, POINT2D, POINT3D, CIRCLE, SQUARE, RECTANGLE, SPHERE} STYPE;
Run Code Online (Sandbox Code Playgroud)

它定义了一个 tagged enum,并为其定义了一个类型名称。此声明在 C++ 中也是允许的,但它与第二个声明没有什么不同。