Jos*_*ams 1 c++ enums typedef enum-class
我可能遗漏了一些东西,但我正在使用一个使用大量
typedef enum foo
{
....
} foo;
Run Code Online (Sandbox Code Playgroud)
这与枚举类相同但不是强类型的吗?
使用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.
希望这可以帮助!