Skip to content

枚举

枚举中的每个枚举项都成为一个该枚举的具名常量,在外围作用域可见。枚举的默认关联类型是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;