typedef 枚举和枚举类有什么区别?

What's the difference between typedef enum and enum class?

本文关键字:枚举 区别 什么 typedef      更新时间:2023-10-16

我可能错过了一些东西,但我正在使用一个使用大量

typedef enum foo
{
....
} foo;

这是否与枚举类相同,但不是强类型?

使用typedef enum执行与enum class不同的操作。

typedef enum的使用,正如@UnholySheep评论中提到的,主要是C++不需要的C习语。在 C 中,如果您声明了这样的enum

enum Ghost {
Blinky,
Pinky,
Inky,
Clyde
};

然后要声明一个类型Ghost的变量,你必须说

enum Ghost oneGhost;

在这里使用"enum"可能有点烦人,所以出现了一种模式,将enum声明写成

typedef enum Ghost {
Blinky,
Winky,
Pinky,
Clyde
} Ghost;

这说"有一种类型叫做enum Ghost定义为通常的,但你可以简称它Ghost。这样,在 C 中,你可以写

Ghost myGhost;

并拥有您需要的一切。

但是,C++放弃了以这种方式使用enum的要求。如果你有一个使用代码的第一个(typedef-free(版本定义的Ghost,你可以说Ghost myGhost;很好。从这个意义上说,没有太多理由在C++中使用typedef enum

这与enum class完全不同。在C++中,enum class的优点是枚举中定义的常量最终不会成为定义enum的命名空间的一部分,并且不能从enum class类型隐式转换为整数类型。从这个意义上说,enum class主要是关于类型安全,并且很难在enum中犯错误。

希望这有帮助!