小编典典

为什么枚举类比普通枚举更受欢迎?

all

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

但这究竟意味着什么?


阅读 175

收藏
2022-03-07

共1个答案

小编典典

C++有两种enum

  1. enum classes
  2. 平原enum_

以下是一些关于如何声明它们的示例:

 enum class Color { red, green, blue }; // enum class
 enum Animal { dog, cat, bird, human }; // plain enum

两者有什么区别?

  • enum classes - 枚举器名称是枚举的 本地 名称,它们的值 不会 隐式转换为其他类型(如另一个enumint

  • 普通enums - 其中枚举器名称与枚举在同一范围内,并且它们的值隐式转换为整数和其他类型

例子:

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;

}

结论:

enum classes 应该是首选,因为它们会减少可能导致错误的意外。

2022-03-07