列舉enum學習小記

2021-05-26 14:45:15 字數 1584 閱讀 5534

1、列舉enum的用途淺例

寫程式時,我們常常需要為某個物件關聯一組可選alternative屬性.例如,學生的成績分a,b,c,d等,天氣分sunny, cloudy, rainy等等。

const int input = 1;

const int output = 2;

然後,呼叫以下函式:

bool open_file(string file_name, int open_mode);

比如,這種做法比較簡單,但存在許多缺點,主要的一點就是無法限制傳遞給open_file函式的第2個引數的取值範圍,只要傳遞int型別的值都是合法的。(當然,這樣的情況下的應對措施就是在open_file函式內部判斷第二個引數的取值,只有在1,2,3範圍內才處理。)

使用列舉能在一定程度上減輕這種尷尬(注1),它不但能實現類似於之前定義三個常量的功能,還能夠將這三個值組合起來成為獨一無二的組。例如:

以上定義了open_modes為列舉型別enumeration type。每乙個命名了的列舉都是唯一的型別,是乙個型別標示器type specifier。例如,我們可以重新寫乙個open_file函式:

bool open_file(string file_name, open_modes om);

也一樣會出錯哦!例如:

open_file("phenix_and_the_crane", 1);

2、列舉的定義

乙個列舉是乙個型別,可以儲存一組由使用者刻畫的值。定義之類,列舉的使用很像乙個整數型別。

enum [enumeration name] ;

3、枚舉子的型別和取值

預設下,第乙個枚舉子被賦值0,接下來的枚舉子取值是前面乙個枚舉子的取值+1,例如:

enum weather ;

其中sunny == 0,

cloudy == 1,

rainy == 2,

windy == 3;

以上是預設情況,有時候我們希望顯式地指定某個枚舉子的值,那麼會出現什麼情況呢?看看:

從這個例子也可以看出,同一列舉中枚舉子的取值不需要唯一。這樣有什麼用處呢?下面是個簡單的例子:

enum some_big_cities ;

以上簡單地按區域,將五個城市按照華南(4),華東(2), 華北(3)的幾個城市分類了。

4、列舉變數的定義、初始化和賦值

既然每個列舉都是乙個型別,那麼由這個型別自然可以宣告變數,例如,由前面定義的some_big_cities:

some_big_cities where_i_am;

需要注意的是,在宣告where_i_am時沒有初始化,如果這時列印where_i_am的值:

enum some_big_cities ;

int main(void)

; //flags的取值範圍是[0, 15];

flags f1 = 5; //錯誤!沒有定義從int到flags的隱式型別轉換;

flags f2 = flags(14); //可以,利用顯式的型別轉換,而且14在[0,15]中;

//雖然在flags的定義當中沒有14這個值;

flags f3 = flags(21); //錯誤!21不在[0, 15]當中;

列舉enum學習

enum enumeration name chongqi 3 以上簡單地按區域,將五個城市按照華南 4 華東 2 華北 3 的幾個城市分類了。4 列舉變數的定義 初始化和賦值 至於列舉可以當作特定的整型數來用的例子,從open modes可以體會。7 自定義運算子 列舉是使用者自定義型別,所以在使...

enum用法小記

enum是大家都比較喜歡用的一種結構,有助提供清晰的邏輯,有點技巧能使其更有用。以前經常看到這樣的 不知其最後的none也何用,今天實際碰到時,才知道是多麼美妙的技巧啊。一般的,用int i b 這樣的寫法,肯定是沒問題的,顯然,在這裡 i 等於1,但是,如果我要將int轉換為enum值,典型的情況...

Python列舉類(Enum 學習

an enumeration is a set of symbolic names members bound to unique,constant values.within an enumeration,the members can be compared by identity,and th...