Appearance
枚举
枚举中的每个枚举项都成为一个该枚举的具名常量,在外围作用域可见。枚举的默认关联类型是int,首个枚举项被初始化为0,后续值为前一项加1,也可手动给枚举项赋值。
无作用域枚举
枚举中的每个枚举项都成为一个该枚举的具名常量,在外围作用域可见。枚举的默认关联类型是int,首个枚举项被初始化为0,后续值为前一项加1,也可手动给枚举项赋值。
cpp
// 方式一
enum {
red,
green,
black
};
// 方式二
enum Color{
red,
green,
black
};
// 方式三
enum Color: int{
red,
green,
black = 20
};
auto x = red;
if(x == red) {
// ...
}
int value = x; // value 为 0;
有作用域枚举
枚举中的每个枚举项在外围作用域不可见,可以用作用域解析运算符访问,没有从有作用域枚举到int类型的隐式转换,但是可以使用static_cast获取枚举的值。
cpp
// 方式一
enum class Color{
red,
green,
black
};
// 方式二
enum struct Color{
red,
green,
black
};
auto x = Color::red;
if(x == Color::red) {
// ...
}
int value = x; // 报错
int value = static_cast<int>(x); // value 为 0;
using enum
直接引入枚举项。
cpp
enum class Color{
red,
green,
black
};
using enum Color;
auto value = red;