Scoped enums

C++ 11 引入了所谓的作用域枚举。这些是枚举,其成员必须使用 enumname::membername 进行限定。使用 enum class 语法声明范围内的枚举。例如,将颜色存储在彩虹中:

enum class rainbow {
    RED,
    ORANGE,
    YELLOW,
    GREEN,
    BLUE,
    INDIGO,
    VIOLET
};

要访问特定颜色:

rainbow r = rainbow::INDIGO;

如果没有强制转换,enum classes 不能隐式转换为 ints。所以 int x = rainbow::RED 无效。

Scoped 枚举还允许你指定基础类型,这是用于表示成员的类型。默认情况下是 int。在 Tic-Tac-Toe 游戏中,你可以将该作品存储为

enum class piece : char {
    EMPTY = '\0',
    X = 'X',
    O = 'O',
};

正如你可能注意到的,enums 在最后一个成员之后可以有一个尾随逗号。