• C++枚举类


    在C++11及以后的版本中,引入了枚举类(也称为强类型枚举或作用域枚举),这是对传统枚举(C风格枚举)的一个改进。枚举类提供了更好的类型安全和作用域控制。

    传统枚举(C风格枚举)

    传统枚举在C++中类似于整数类型,但它们限制了可以赋给变量的值的集合。然而,它们没有类型安全性,并且它们的枚举值隐式地转换为整数。

    1. enum Color { RED, GREEN, BLUE };
    2. Color c = RED; // 没问题
    3. int i = RED; // 隐式转换,也没有问题

    枚举类(C++11及以后)

    枚举类提供了更严格的类型检查和更好的作用域控制。枚举类类型不会隐式地转换为其他类型(除了用户定义的显式转换),并且枚举值的作用域被限制在枚举类内部。

    1. enum class Color : unsigned int { RED, GREEN, BLUE };
    2. Color c = Color::RED; // 注意这里需要使用 Color:: 前缀
    3. // int i = RED; // 错误,RED 不在当前作用域内
    4. // int j = Color::RED; // 错误,没有隐式转换
    5. // 如果需要显式转换,可以这样做:
    6. unsigned int k = static_cast<unsigned int>(Color::RED);

    在上面的例子中,Color 是一个枚举类,它的底层类型被指定为 unsigned int(虽然这是可选的,如果不指定,则默认为 int)。使用 Color::RED 来引用枚举值,并且由于类型安全性的提高,RED 不能隐式地转换为其他类型(如 int)。

    枚举类的优点

    1. 类型安全:枚举类提供了更好的类型安全性,因为它们不会隐式地转换为其他类型。
    2. 作用域控制:枚举值的作用域被限制在枚举类内部,这有助于减少命名冲突。
    3. 底层类型控制:可以指定枚举类的底层类型(如 unsigned intchar 等)。
    4. 可读性和可维护性:使用枚举类可以使代码更具可读性和可维护性,因为它们提供了更清晰的意图和限制。
    1. #include
    2. enum class Color : unsigned char { RED, GREEN, BLUE };
    3. void printColor(Color c) {
    4. switch (c) {
    5. case Color::RED:
    6. std::cout << "Red\n";
    7. break;
    8. case Color::GREEN:
    9. std::cout << "Green\n";
    10. break;
    11. case Color::BLUE:
    12. std::cout << "Blue\n";
    13. break;
    14. default:
    15. std::cout << "Unknown color\n";
    16. break;
    17. }
    18. }
    19. int main() {
    20. Color c = Color::RED;
    21. printColor(c); // 输出 "Red"
    22. return 0;
    23. }

  • 相关阅读:
    【多线程初阶】多线程案例之线程池
    VNC远程连接无法打开图形界面应用问题
    Win11分磁盘怎么分?Win11系统怎么分磁盘?
    2057. 值相等的最小索引
    NX二次开发-将工程图视图+尺寸的最大边界导出图片
    NNDL 作业8:RNN - 简单循环网络
    protobufjs实现protobuf序列化与反序列化
    [论文分享] VideoFlow: A Flow-Based Generative Model for Video
    Kubernetes 网络排查方法
    腾讯云服务器公网带宽速度怎么样?上传下载实测!
  • 原文地址:https://blog.csdn.net/Ethan_Rich/article/details/140060395