列舉
-
介紹列舉型別的定義。
enum Direction { UP, LEFT, DOWN, RIGHT }; Direction d = UP;
Version >= C++ 11
在 C++ 11 中,enum
可以可選地後跟 class
或 struct
來定義範圍列舉 。此外,範圍和未範圍的列舉可以使用: T
在列舉名稱後明確指定其基礎型別,其中 T
指的是整數型別。
enum class Format : char {
TEXT,
PDF,
OTHER
};
Format f = Format::TEXT;
enum Language : int {
ENGLISH,
FRENCH,
OTHER
};
普通 enum
s 中的列舉數也可以在範圍運算子之前,儘管它們仍然被認為屬於 enum
定義的範圍。
Language l1, l2;
l1 = ENGLISH;
l2 = Language::OTHER;
-
介紹一個*詳細的型別說明符,*它指定以下名稱是先前宣告的列舉型別的名稱。 (精心設計的型別說明符不能用於向前宣告列舉型別。)即使用其他名稱隱藏,也可以用這種方式命名列舉。
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
-
引入一個*不透明的列舉宣告,*宣告列舉而不定義它。它可以重新宣告先前宣告的列舉,也可以向前宣告先前未宣告的列舉。
首先宣告為作用域的列舉以後不能宣告為 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