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 在最後一個成員之後可以有一個尾隨逗號。