当前位置: 首页 > 知识库问答 >
问题:

为什么枚举类优于普通枚举?

公冶谦
2023-03-14

我听到一些人建议在C++中使用枚举类,因为它们的类型安全。

但这到底意味着什么呢?

共有1个答案

窦成荫
2023-03-14

C++有两种枚举:

  1. 枚举类ES
  2. 普通枚举s

下面是一些如何声明它们的示例:

 enum class Color { red, green, blue }; // enum class
 enum Animal { dog, cat, bird, human }; // plain enum 
enum Color { red, green, blue };                    // plain enum 
enum Card { red_card, green_card, yellow_card };    // another plain enum 
enum class Animal { dog, deer, cat, bird, human };  // enum class
enum class Mammal { kangaroo, deer, human };        // another enum class

void fun() {

    // examples of bad use of plain enums:
    Color color = Color::red;
    Card card = Card::green_card;

    int num = color;    // no problem

    if (color == Card::red_card) // no problem (bad)
        cout << "bad" << endl;

    if (card == Color::green)   // no problem (bad)
        cout << "bad" << endl;

    // examples of good use of enum classes (safe)
    Animal a = Animal::deer;
    Mammal m = Mammal::deer;

    int num2 = a;   // error
    if (m == a)         // error (good)
        cout << "bad" << endl;

    if (a == Mammal::deer) // error (good)
        cout << "bad" << endl;

}
 类似资料:
  • 问题内容: 可以使用以下任一方法在JPA中定义枚举 要么 我想知道这两个定义的优缺点是什么? 我听说ORDINAL的性能比EclipseLink的STRING更好(更快)。 真的吗? 问题答案: 我总是去。 速度很少是最重要的问题-可读性和可维护性 更为 重要。 我使用它是因为手动检查数据库中的行要容易得多,但更重要的是,我可以做两件事,而无需接触数据库,无法处理: 我可以更改枚举的 顺序 我可以

  • 问题内容: 我是一名即将毕业的计算机科学专业的学生,​​在我的整个编码生涯中,我发现很少使用枚举的实例,除了典型的情况(例如代表标准纸牌的面孔)外,还使用了枚举。 您是否知道在日常编码中使用枚举的任何巧妙方法? 为什么枚举如此重要,在什么情况下应该能够确定建立枚举是最佳方法? 问题答案: 这些是主要的论点,以及短的例子。 的情况 从Java 6开始,是一个凌乱类的示例,该类可以从使用中受益匪浅(除

  • 问题内容: 我想知道为什么在Java语言中a 不能扩展。 我不是在谈论一个延伸的(这不能做,因为Java没有多重继承,而Š隐含延长),但一类的以只添加额外的方法,而不是额外的枚举值。 就像是: 要这样使用: 因此,有人可以对此限制提供理由(或将我指向正确的JLS部分)吗? 问题答案: 我认为 他们这样做 的答案来自以下问题: 在您的示例中,如何实例化MyClass?用户永远不会(通过)显式实例化枚

  • 当您需要定义错误码和错误信息时,可能会使用以下方式, <?php class ErrorCode { const SERVER_ERROR = 500; const PARAMS_INVALID = 1000; public static $messages = [ self::SERVER_ERROR => 'Server Error',

  • 枚举具有名为'hash value'的属性,该属性是枚举内的索引。

  • 问题内容: 在JDK1.5之前的Java中,“ Typesafe Enum”模式是实现只能接受有限数量的值的类型的常用方法: (例如,参见Bloch的Effective Java中的第21项)。 现在在JDK1.5 +中,显然可以使用“官方”方式enum: 显然,该语法更好,更简洁(不需要为值明确定义字段,适当toString()提供),但是到目前为止enum看起来非常类似于模式。 我知道的其他差