C++ 枚举(传统枚举与枚举类)

枚举

在C++中,枚举(Enumeration)是一种用户定义的数据类型,它由一组命名的整数常量组成。枚举在C++中有几种不同的形式。

传统枚举(Unscoped Enum)

传统枚举(也称为未作用域枚举)定义如下:

enum Color {
    RED,
    GREEN,
    BLUE
};

上述例子中,Color是枚举的类型名,REDGREENBLUE是枚举的成员。默认情况下,枚举成员的值从0开始,并依次递增。

特点

  • 枚举成员的作用域是全局的。
  • 枚举成员可以隐式地转换为整型。
  • 枚举成员可以不显式指定值,如果不指定,则从0开始依次递增。

作用域枚举(Scoped Enum)

C++ 11 引入了作用域枚举,定义如下:

enum class Color {
    RED,
    GREEN,
    BLUE
};
// 或
enum struct Color {
    RED,
    GREEN,
    BLUE
};

特点

  • 枚举成员的作用域是枚举类型内部,必须通过枚举类型来访问。
  • 枚举成员不能隐式转换为整型,必须显式转换。
  • 提供了更好的类型安全。

使用枚举

  • 传统枚举
enum Color {
    RED,
    GREEN,
    BLUE
};

Color c = RED;
if (c == RED) {
    // do something
}
  • 作用域枚举
enum class Color {
    RED,
    GREEN,
    BLUE
};

Color c = Color::RED;
if (c == Color::RED) {
    // do something
}

显式指定枚举值

enum class Color {
    RED = 1,
    GREEN = 2,
    BLUE = 4
};

也可以部分显式指定(未指定的部分会在前一个基础上加一)

enum class Color {
    RED = 2,
    GREEN = 4,
    BLUE  // BLUE = 5
};
posted @ 2024-12-12 10:21  风陵南  阅读(108)  评论(0)    收藏  举报