typedef 枚举和枚举类有什么区别?
What's the difference between typedef enum and enum class?
我可能错过了一些东西,但我正在使用一个使用大量
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
中犯错误。
希望这有帮助!
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 打印没有铸件的枚举可以在C++中吗?
- C++中的标签和枚举调度有什么区别
- C++:使用结构或枚举重载构造函数之间的区别
- 枚举器、结构体和类之间有什么区别?
- 枚举与枚举类的区别
- 枚举与枚举类的区别
- 模板递归中的函数、结构枚举和结构属性有什么区别?