關於C++列舉型別
C++程式語言作為一種功能強大的語言,對開發人員來說作用是非常大的。不過,其中有很多應用方式還需要我們去不斷的探討,不斷從中汲取經驗來達到熟練的程度。下面我們就先為大家詳細介紹一下有關C++列舉型別的相關概念。
1、列舉enum的用途淺例
寫程式時,我們常常需要為某個物件關聯一組可選alternative屬性.例如,學生的成績分A,B,C,D等,天氣分sunny, cloudy, rainy等等。更常見的,開啟一個檔案可能有三種狀態:input, output和append. 典型做法是,對應定義3個常數,即:
- const int input = 1;
- const int output = 2;
- const int append = 3;
然後,呼叫以下函式:
- bool open_file(string file_name, int open_mode);
比如,
- open_file("Phenix_and_the_Crane", append);
這種做法比較簡單,但存在許多缺點,主要的一點就是無法限制傳遞給open_file函式的第2個引數的取值範圍,只要傳遞int型別的值都是合法的。(當然,這樣的情況下的應對措施就是在open_file函式內部判斷第二個引數的取值,只有在1,2,3範圍內才處理。)
使用列舉能在一定程度上減輕這種尷尬(注1),它不但能實現類似於之前定義三個常量的功能,還能夠將這三個值組合起來成為獨一無二的組。例如:
- enum open_modes {input = 1, output, append};
以上定義了open_modes為C++列舉型別enumeration type。每一個命名了的列舉都是唯一的型別,是一個型別標示器type specifier。例如,我們可以重新寫一個open_file函式:
- bool open_file(string file_name, open_modes om);
在open_modes列舉中,input, output, append稱為列舉子enumerator, 它們限定了open_modes定義的物件的取值範圍。這個時候,呼叫open_file函式和之前的方法還是一模一樣:
- open_file("Phenix_and_the_Crane", append);
但是,如果傳遞給open_file的第二個引數不是open_modes列舉型別值的話(注1),那麼編譯器就會識別出錯誤;就算該引數取值等價於input, output, append中的某個,
也一樣會出錯哦!例如:
- open_file("Phenix_and_the_Crane", 1);
2、C++列舉型別的定義
一個列舉是一個型別,可以儲存一組由使用者刻畫的值。定義之類,列舉的使用很像一個整數型別。列舉的定義具有以下形式,即以關鍵詞enum開頭,接著一個可選的列舉名,下來是由大括號{}包含著一個由逗號分隔的列舉子列表enumerators list:
- enum [enumeration name] {enumerator1[=value1], enumerator2[=value2], ...};
相關文章
- 【C++】資料型別-列舉型C++資料型別
- C++ 列舉型別介紹C++型別
- 列舉型別型別
- ENUM列舉型別型別
- java列舉型別Java型別
- java 列舉型別Java型別
- [C++]結構體、共同體和列舉型別C++結構體型別
- Java - Enum 列舉型別Java型別
- java中的列舉型別Java型別
- JavaSE基礎:列舉型別Java型別
- mysql之ENUM列舉型別MySql型別
- 列舉型別分享 第五節型別
- java基礎(十一) 列舉型別Java型別
- Python 中的列舉型別Python型別
- 列舉型別與位運算型別
- 10-列舉型別和流型別
- C++特別數的和(列舉)C++
- JPA不識別MySQL的列舉型別MySql型別
- C/C++列舉enum分別列印輸出列舉子和列舉值的方法C++
- OC中列舉寫法 以及 字串型別列舉實現探索字串型別
- java中的列舉型別學習Java型別
- Java基礎教程(15)–列舉型別Java型別
- C語言 列舉資料型別C語言資料型別
- 列舉型別在JPA中的使用型別
- 補充:C語言列舉型別C語言型別
- 簡單探討TypeScript 列舉型別TypeScript型別
- Java列舉型別的使用和原理Java型別
- c語言(列舉(enumeration)型別)C語言型別
- C++typedef宣告,enum列舉型別C++型別
- C#中列舉型別的使用C#型別
- 巨集定義和列舉型別的區別型別
- 窺探Swift之別樣的列舉型別Swift型別
- 《C++ Primer》 ---- 關於變數 與 基本型別C++變數型別
- dedecms聯動型別裡,知道列舉值,如何轉換為列舉名型別
- PHP 列舉型別的管理與設計PHP型別
- 物聯網學習教程—列舉型別型別
- iOS-列舉型別為什麼要用iOS型別
- 南外c++集訓列舉題:關燈C++