enum是枚举类型,可用于区分某一类事物。如:enum NUM{ONE = 1, TWO, THREE},但上面例子中的枚举类型在使用中可能存在不确定性:
- 没有严格的作用域限制,容易重名。
- 无法前向声明。
- 无法指定变量类型(默认int型)。
- 存在隐式转换风险(转为int等)。
如何解决上述问题呢?
-
可以通过
特殊前缀的方法,解决重名问题。如:NUM_ONE = 1 -
通过
namespace或类的方法解决作用域问题。namespace NUM { enum { ONE = 1, TWO, THREE }; } struct NUM2 { enum { ONE = 1, TWO, THREE }; }; -
枚举类
- 有自己的作用域。
- 不能隐式转换为其他类型
- 能够前向声明。
- 能够指定成员类型。
#include <iostream> enum class NUM : char; enum class NUM : char { ONE = '1', TWO = '2', THREE = '3' }; int main(void) { std::cout << static_cast<char>(NUM::THREE) << std::endl; }