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

Jos*_*ams 1 c++ enums typedef enum-class

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

typedef enum foo
{
    ....
} foo;
Run Code Online (Sandbox Code Playgroud)

这与枚举类相同但不是强类型的吗?

tem*_*def 6

使用typedef enum与enum class.

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

enum Ghost {
    Blinky,
    Pinky,
    Inky,
    Clyde
};
Run Code Online (Sandbox Code Playgroud)

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

enum Ghost oneGhost;
Run Code Online (Sandbox Code Playgroud)

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

typedef enum Ghost {
    Blinky,
    Winky,
    Pinky,
    Clyde
} Ghost;
Run Code Online (Sandbox Code Playgroud)

这表示“有一个类型叫作enum Ghost通常的定义,但你可以Ghost简称它。那样,在 C 中,你可以写

Ghost myGhost;
Run Code Online (Sandbox Code Playgroud)

并拥有您需要的一切。

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

这与enum class. 在 C++ 中,enum class枚举中定义的常量不会最终成为enum定义的命名空间的一部分,并且您不能隐式地从 an 转换enum class为整数类型。从这个意义上说,enum class主要是关于类型安全,并且使用enum.

希望这可以帮助!