C 學習筆記 列舉

2021-07-31 00:03:19 字數 1661 閱讀 8667

一、c++的enum工具提供了另一種建立符號常量的方式,這種方式可以代替const。它還允許定義新型別,但必須按嚴格的限制進行。使用enum的語法與使用結構類似。

例如:

enum spectrum ;

這句語法包含兩個意義:

1、讓spectrum成為新型別的名稱:spectrum被稱為列舉,就像struct被稱為結構一樣。

2、將red、orange、yellow等作為符號常量,它們對應整數值0~7。這些常量叫做列舉量。

注意:預設情況下,將整數值賦給列舉量,第乙個列舉量的值為0,第二個列舉量的值為1,以此類推。也可以通過顯式地指定整數值來覆蓋預設值。

二、列舉的特徵

1、可以用列舉名來宣告這種型別的變數。

spectrum band;

2、列舉變數在不進行強制型別轉換的情況下,只能將定義列舉時使用的列舉量賦給這種列舉的變數。

band = blue;     有效

band = 2000;   無效

因此,spectrum變數受到限制,只有8個可能的值。如果試圖將乙個非法值賦給它,則有些編譯器將出現編譯器錯誤,或者發出警告。

3、對於列舉,只定義了賦值運算子,沒有為列舉定義算術運算子。

band = orange;  有效

++band;        無效

band = orange + red;   無效

4、列舉量是整型,可被提公升為int型別,但int型別不能自動轉換為列舉型別。

int color = blue;有效

band = 3;無效

color = 3 + red;有效,red在這過程中轉換為int和3相加,並賦予了color(同樣是int型別)

三、設定列舉量的值

1、使用賦值運算子顯式地設定列舉量的值:

enum bits ;

2、指定的值必須是整數,也可以只顯式地定義其中一些列舉量的值:

enum bigstep ;

3、可以建立多個值相同的列舉量:

enum ;

四、列舉的取值範圍

對於列舉來說,只有宣告中指出的那些值是有效的。然而,c++現在通過強制型別轉換,增加了可賦給列舉變數的合法值。每個列舉值都有取值範圍(range),

通過強制型別轉換,可以將取值範圍中的任何整數值賦給列舉變數,即使這個值不是列舉值。

例如,enum bits ;

bits myflag;

則下面的**將是合法的:

myflag = bits(6);

其中6不是列舉值,但它位於列舉定義的取值範圍內。

取值範圍的定義如下。

(1)首先,要找出上限,需要知道列舉量的最大值。找到大於這個最大值的、最小的2的冪,將它減去1,得到的便是取值範圍的上限。

例如,前面定義的bigstep的最大值列舉值是101。在2的冪中,比這個數大的最小值為128,因此取值範圍的上限為127。

(2)要計算下限,需要知道列舉量的最小值。如

果它不小於0,則取值範圍的下限為0;否則,採用與尋找上限方式相同的方式,但加上負號。

例如,如果最小的列舉量為-6,而比它小的、最大的2的冪是-8(加上負號),因此下限為-7。

選擇用多少空間來儲存列舉由編譯器決定。對於取值範圍較小的列舉,使用乙個位元組或更少的空間;而對於包含long型別值的列舉,則使用4個位元組。

C學習筆記 列舉

可以使用列舉 enumerated type 宣告代表整數常量的符號名稱,關鍵字enum建立乙個新的列舉型別 實際上,enum常量是int型別的 列舉的本質就是int型的常量 enum spectrum 申明乙個列舉型別enum spectrum color 定義乙個列舉變數void func en...

C 學習筆記(十六)列舉

列舉 列舉是由使用者定義的值型別的資料型別。列舉只有一種資料型別成員 命名的整數值常量,預設為int。預設情況下,第乙個成員賦值為0,後續自增1。在列舉宣告中沒有分號,只有逗號分隔的列表。列舉的成員型別不能使用修飾符,他們隱式地具有和列舉相同的可訪問性。不能列舉成員之間不能做比較。1.設定底層型別和...

C 學習 列舉

c 中,所有列舉都是 system.enum 類的例項,system.enum不可以被派生。但是這個類有一些靜態方法,可以用來發現有關列舉例項中操作值的資訊。預設情況下,列舉中每個元素的基礎型別都為 int。可以使用冒號指定另一種整數型別 enum days byte 1 列舉能夠使 更加清晰,它允...