列舉成員
列舉成員清單 (或 列舉元) 提供一組值給資料類型。
在 C 中, 列舉常數 的類型是 int
。 如果使用常數表示式作為起始設定元,則表示式的值不能超出 int
的範圍 (亦即,在標頭 limits.h
中定義的 INT_MIN 到 INT_MAX)。
在 C++ 中,每一個列舉常數都有一個值可以提升為帶正負號或不帶正負號的整數值,以及一個不需要是整數的特殊類型。 您可以在任何容許整數常數的位置使用列舉常數,或在任何容許列舉類型值的位置使用列舉常數。
列舉常數的值以下列方式決定:
- 等號 (
=
) 和列舉常數之後的常數表示式會提供明確值給列舉常數。 列舉常數代表常數表示式的值。 - 如果未指派明確值,則清單中最左邊的列舉常數會收到值零 (0)。
- 未明確指派值的列舉常數會收到比前一個列舉常數所代表的值大 1 的整數值。
僅限 C++11 的開頭。
下列列舉的基礎類型是固定的。 遵循先前規則取得的列舉元值必須依基礎類型呈現。 否則,列舉形式不正確。
- 限定範圍的列舉
- 指定明確基礎類型的非限定範圍列舉
非限定範圍列舉的基礎類型 (沒有明確的基礎類型) 不是固定的,由列舉元值來決定,如下所示:
- 基礎類型是實作定義的整數類型,不大於int並且可以代表列舉的所有值。
- 如果列舉的值無法以int或unsigned int,基礎類型是實作定義的整數類型,足以代表所有列舉元值。
- 如果沒有任何類型可以代表所有列舉元值,則列舉形式不正確。
僅限 C++11 結尾。
下列資料類型宣告列出
oats
、 wheat
、 barley
、 corn
及 rice
作為列舉常數。 每一個常數下的數字會顯示整數值。enum grain { oats, wheat, barley, corn, rice };
/* 0 1 2 3 4 */
enum grain { oats=1, wheat, barley, corn, rice };
/* 1 2 3 4 5 */
enum grain { oats, wheat=10, barley, corn=20, rice };
/* 0 10 11 20 21 */
可以將相同的整數與兩個不同的列舉常數相關聯。 例如,下列定義有效。 ID
suspend
和 hold
具有相同的整數值。enum status { run, clear=5, suspend, resume, hold=6 };
/* 0 5 6 7 6 */
在定義列舉的範圍內,每一個列舉常數都必須是唯一的。 在下列範例中,
average
和 poor
的第二個宣告會導致編譯器錯誤:func()
{
enum score { poor, average, good };
enum rating { below, average, above };
int poor;
}
利用限定範圍的列舉,您可以避免這類錯誤,因為列舉元只會宣告在列舉的範圍中,而不會宣告包含列舉的範圍。
相關資訊