示例代码#include iostream // 普通枚举 enum Color { Red, Green, Blue }; // 强类型枚举类枚举 enum class Shape { Circle, Square, Triangle }; int main() { // 普通枚举可以隐式转换为整数 Color c Red; int num c; // 合法num 0 std::cout 普通枚举隐式转换 num std::endl; // 强类型枚举不能隐式转换为整数 Shape s Shape::Circle; // int num2 s; // 编译错误必须显式转换 int num2 static_castint(s); // 合法num2 0 std::cout 强类型枚举显式转换 num2 std::endl; // 普通枚举作用域污染枚举值直接暴露在全局/外层作用域 // if (Red 0) {} // 合法Red 直接可用 // 强类型枚举必须通过 枚举名::枚举值 访问无作用域污染 // if (Circle 0) {} // 编译错误 if (Shape::Circle static_castShape(0)) {} // 合法 return 0; }一、作用域规则1.普通枚举枚举成员如Red, Green, Blue直接暴露在枚举定义的作用域中会造成作用域污染导致的问题如果两个普通枚举有同名成员会编译冲突2.强类型枚举枚举成员被封装在枚举类的作用域中要使用需要通过枚举类名::成员访问完全避免了作用域污染二、类型安全性1.普通枚举枚举值可以隐式转换为整数型int、long容易导致一些意外类型错误的发生2.强类型枚举枚举值不可以转化为任何其他类型必须通过static_cast类型(变量)进行显示转换杜绝隐式类型错误三、底层类型控制1.普通枚举底层整数类型由编译器决定通常是int但无明确标准无法手动指定跨平台可能有差异。2.强类型枚举可以显式指定底层类型默认是int提升代码的可移植性和可控性。四、与sizeof结合1.普通枚举普通枚举的sizeof结果依赖编译器可能是 4 字节 int也可能是其他2.强类型枚举强类型枚举的sizeof由显式指定的底层类型决定比如指定uint8_t则sizeof(Shape) 1结果可预测。