enum 注意事项

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

如果觉得有帮助,可以扫描右边的微信打赏码支持一下。

Leave a Reply

Your email address will not be published. Required fields are marked *