zoukankan      html  css  js  c++  java
  • C++ 作用域内枚举

    ——传统的枚举存在一些问题,其中之一是两个枚举类型定义中的枚举量可能发生冲突。

    enum egg {Small, Medium, Large, Jumbo};
    enum t_shirt {Small, Medium, Large, Xlarge};
    

      这将无法通过编译(egg Small和t_shirt Small发生冲突)

    解决办法(新枚举):

    C++11提供了一种新枚举,其枚举量的作用域为类:

    enum class egg {Small, Medium, Large, Jumbo};
    eum class t_shirt {Small, Medium, Large, Xlarge};
    
    • 可使用关键字struct代替class
    • 使用时需使用枚举名来限定枚举量:
      egg choice = egg::Large;    // the Large enumerator of the egg enum
      t_shirt Floyd = t_shirt::Large;    // the Large enumerator of the t_shirt enum
      
    • C++11提高了作用域内枚举的类型安全:
      • 有时,常规枚举将自动转换为整型,如将其赋给int变量或用于比较表达式时,但作用域内枚举不能隐式地转换为整型:
        enum egg_old {Small, Medium, Large, Jumbo};    // unscoped
        enum class t_shirt {Small, Medium, Large, Xlarge};    // scoped
        egg_old one = Medium;    // unscoped
        t_shirt rolf = t_shirt::Large;    // scoped
        int king = one;    // implicit type conversion ofr unscoped
        int ring = rolf;    // not allowed, no implicit type conversion
        if (king < Jumbo)    // allowed
            std::cout<<"Jumbo converted to int before comparison.
        ";
        if (king < t_shirt::Medium)    // not allowed
            std::cout<<"Not allowed: < not defined for scoped enum.
        ";
        

          但在必要时,可显示类型转换:

        int Frodo = int(t_shirt::Small);    // Frodo set to 0
        

          

  • 相关阅读:
    python list dict 去重的两种方式
    python 发送邮件
    mongo 查询总结
    vsftpd 安装配置
    简单配置 nginx 反向代理
    python 检查内存
    python ldap
    Centos 7 vsftpd ldap 配置
    centos7虚拟机开启端口后 外部不能访问的问题
    Linux下安装配置rocketmq (单个Master、双Master)
  • 原文地址:https://www.cnblogs.com/suui90/p/13039563.html
Copyright © 2011-2022 走看看