知识卡片
限域枚举隔离
内容
enum class 将枚举项限制在枚举作用域内,且不隐式转换为整数。它可指定底层类型并前置声明,以显式转换换取名称隔离和类型安全。表达状态、协议类别时,这种边界比沿用裸整数更能防止误混。
参考来源
- 位置:《Effective Modern C++》第3章《移步现代C++》,条款十:优先考虑限域 enum 而非未限域 enum(源文件:_epub-src/EPUB/text/ch004.xhtml)
- 结论依据:原文对照枚举作用域、显式转换与底层类型,支持用限域枚举建立类型边界。
- 原始内容:记住 + C++98的 enum 即非限域 enum 。 + 限域 enum 的枚举名仅在 enum 内可见。要转换为其它类型只能使用 cast 。 + 非限域/限域 enum 都支持底层类型说明语法,限域 enum 底层类型默认是 int 。非限域 enum 没有默认底层类型。 + 限域 enum 总是可以前置声明。非限域 enum 仅当指定它们的底层类型时才能前置。