Scoped enums
C++ 11 引入了所谓的作用域枚举。这些是枚举,其成员必须使用 enumname::membername
进行限定。使用 enum class
语法声明范围内的枚举。例如,将颜色存储在彩虹中:
enum class rainbow {
RED,
ORANGE,
YELLOW,
GREEN,
BLUE,
INDIGO,
VIOLET
};
要访问特定颜色:
rainbow r = rainbow::INDIGO;
如果没有强制转换,enum class
es 不能隐式转换为 int
s。所以 int x = rainbow::RED
无效。
Scoped 枚举还允许你指定基础类型,这是用于表示成员的类型。默认情况下是 int
。在 Tic-Tac-Toe 游戏中,你可以将该作品存储为
enum class piece : char {
EMPTY = '\0',
X = 'X',
O = 'O',
};
正如你可能注意到的,enum
s 在最后一个成员之后可以有一个尾随逗号。