C++笔记 - enum

196 阅读1分钟

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; }