enum 与enum class

时间:2025-02-11 07:20:06

1) enum的功能需要一系列的#define来完成,enum 完成了一系列#define的打包收集,所以对于两个不一样的枚举体,即使枚举体的名字不同,里面的内容也不能重名。

enum Direction
{
TOP_LEFT,
TOP_RIGHT
};
enum Direction1
{
TOP_LEFT,
TOP_RIGHT
};

error C2365: “TOP_LEFT”: 重定义;以前的定义是“枚举数”
1>          ..\test\enum\enum\(8) : 参见“TOP_LEFT”的声明
1> ..\test\enum\enum\(15): error C2365: “TOP_RIGHT”: 重定义;以前的定义是“枚举数”
1>          . .\test\enum\enum\(10) : 参见“TOP_RIGHT”的声明

2) c++ 只允许枚举体等值或者另外一个枚举体变量赋值

enum Direction d = 1;

test\enum\enum\(14): error C2440: “初始化”: 无法从“int”转换为“Direction”
1>          转换为枚举类型要求显式转换(static_cast、C 样式转换或函数样式转换)

3) enum class 更加类型安全