列舉

  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