我听说一些人建议在 C++ 中使用枚举 _类_,因为它们的 类型安全。
但这究竟意味着什么?
原文由 Oleksiy 发布,翻译遵循 CC BY-SA 4.0 许可协议
值得注意的是,除了这些其他答案之外,C++20 还解决了 enum class
存在的问题之一:冗长。想象一个假设的 enum class
, Color
。
void foo(Color c)
switch (c) {
case Color::Red: ...;
case Color::Green: ...;
case Color::Blue: ...;
// etc
}
}
与普通的 enum
变体相比,这是冗长的,其中名称在全局范围内,因此不需要前缀 Color::
。
但是,在 C++20 中,我们可以使用 using enum
将枚举中的所有名称引入当前作用域,从而解决问题。
void foo(Color c)
using enum Color;
switch (c) {
case Red: ...;
case Green: ...;
case Blue: ...;
// etc
}
}
所以现在,没有理由不使用 enum class
。
原文由 themeeman 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
C++有两种
enum
:enum class
esenum
s以下是一些关于如何声明它们的示例:
两者有什么区别?
enum class
es - 枚举器名称是枚举的 本地 名称,并且它们的值 不会 隐式转换为其他类型(如另一个enum
或int
)普通
enum
s - 其中枚举数名称与枚举在同一范围内,并且它们的值隐式转换为整数和其他类型例子:
结论:
enum class
es 应该是首选,因为它们会减少可能导致错误的意外。