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...