我可能错过了一些东西,但我正在使用一个使用大量
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
中犯错误。
希望这有帮助!