枚举

  1. 介绍枚举类型的定义。

    enum Direction {
        UP,
        LEFT,
        DOWN,
        RIGHT
    };
    Direction d = UP;
    

Version >= C++ 11

在 C++ 11 中,enum 可以可选地后跟 classstruct 来定义范围枚举 。此外,范围和未范围的枚举可以使用: T 在枚举名称后明确指定其基础类型,其中 T 指的是整数类型。

   enum class Format : char {
       TEXT,
       PDF,
       OTHER
   };
   Format f = Format::TEXT;

   enum Language : int {
       ENGLISH,
       FRENCH,
       OTHER
   };

普通 enums 中的枚举数也可以在范围运算符之前,尽管它们仍然被认为属于 enum 定义的范围。

   Language l1, l2;

   l1 = ENGLISH;
   l2 = Language::OTHER;
  1. 介绍一个*详细的类型说明符,*它指定以下名称是先前声明的枚举类型的名称。 (精心设计的类型说明符不能用于向前声明枚举类型。)即使用其他名称隐藏,也可以用这种方式命名枚举。

    enum Foo { FOO };
    void Foo() {}
    Foo foo = FOO;      // ill-formed; Foo refers to the function
    enum Foo foo = FOO; // ok; Foo refers to the enum type
    

Version >= C++ 11

  1. 引入一个*不透明的枚举声明,*声明枚举而不定义它。它可以重新声明先前声明的枚举,也可以向前声明先前未声明的枚举。

    首先声明为作用域的枚举以后不能声明为 unscoped,*反之亦然。*枚举的所有声明必须在基础类型中达成一致。

    在向前声明未映射的枚举时,必须明确指定基础类型,因为在枚举器的值已知之前无法推断它。

    enum class Format; // underlying type is implicitly int
    void f(Format f);
    enum class Format {
        TEXT,
        PDF,
        OTHER,
    };
    
    enum Direction;    // ill-formed; must specify underlying type