enum列舉型別用法

2021-10-19 23:50:23 字數 3822 閱讀 2658

2. 列舉變數和列舉常量的關聯對應

3. 列舉型別和變數的應用

4. 總結

5. 參考資料

在實際的程式設計應用中,有的變數只有幾種可能的取值,譬如說乙個家族的幾個成員,性別的兩種可能等等。c++為這種型別的變數的定義提供了enum關鍵字

要使用列舉型別的變數,首先需要先定義乙個列舉型別名,再宣告變數是該列舉型別的。

1.1 列舉型別的定義和宣告

之所以被稱為列舉型別,就是因為命名常量是作為資料型別定義的一部分而列舉或列出的,以下是列舉型別宣告的示例:

enum roster 

;// 定義匿名的列舉變數,只能使用a這乙個列舉型別的變數,不能再定義其他該型別的列舉變數

enum

a;// typedef enum則是用來定義乙個資料型別,那麼該型別的變數值只能在enum定義的範圍內取

typedef

enum

day;

// 定義enum/列舉型別的同時,宣告變數

enum month a,b;

上述例子中的tom、sharon等稱為列舉元素列舉常量(本人更傾向於稱其為列舉常量,因為這樣可以反映其性質),它們是使用者自定義的識別符號而已。

預設/不顯示說明情況下,編譯器設定第乙個列舉量為 0,下乙個為 1,以此類推(沒有顯示說明下步長為1)。在上述示例中,tom 的值將是 0,sharon 的值為 1,等等。最後乙個列舉量 john 的值為 4。

1.2 列舉變數的定義和宣告

enum 語句實際上並沒有建立任何變數,只是定義了乙個列舉型別。當以後建立這個資料型別的變數時,它們看起來就是整數,並且這些整數的值被限制在與列舉集合中的符號名稱相關聯的整數上。以下語句定義了兩個 roster 資料型別的變數:

enum roster grandfather;

//該語句宣告了乙個列舉型別的變數

enum roster student;

此語句的形式與其他任何變數定義一樣,首先是資料型別名稱,然後是變數名稱。資料型別名稱是 roster,而不是 enum roster。

注意:

前述語句已經建立 student 這一枚舉變數,也可直接定義並賦值,操作如下:

student = sharon;

enum roster stu1 = john;

如前所述,預設情況/不顯示說明的情況下,列舉列表中的符號將被賦給整數值 0、1、2 等等

列舉列表中的符號如果不合適,則可以指定要賦給的值,如以下示例所示:

enum department 

;

如果為列舉符號賦值,則它們必須是整數。以下賦值語句將產生錯誤:

enum department 

;//錯誤

雖然沒有要求按公升序排列賦給的整數值,但一般預設是這樣。

如果在賦值時省略了乙個或多個符號,則它們將被賦給乙個預設值,以下兩個示例:

//示例1

enum colors

;

在該示例中,命名常量 red 將被賦值為 0,orange 將為 1,yellow 將為 9,green 將為 10,blue 將為 11。

//示例2

enum rooms

;

在該示例中,livingroom 被賦值為 1,den 將為 2,bedroom 將為 3,kitchen 將為 4。

3.1 作為判斷語句中的邏輯

if

(student == sharon)

//使用常規的手段輸出無法輸出列舉常量所對應的字串,因為列舉常量為整型值

roster student1 = sharon;

cout << student1;

//語句輸出:

//>2

student =1;

//錯誤

if

(student == bill)

if(student ==

2)

if

(student1 < student2)

#include

using

namespace std;

// declare the enumerated type

enum roster

;// sharon - john will be assigned default values 2-5.

intmain()

return0;

}//程式執行結果:

//>2

//sharon's birthday is april 22.

3.2 一次定義多個常量

比如程式中處理的問題與星期幾有關,可能要將星期一轉換為數字1,星期二轉換為數字2,一直到數字7,在不用enum關鍵字的情況下,可以使用define來定義,但是會覺得很麻煩,因為因為要乙個個的定義,星期的就只有7天,如果是月份,一年有12個月份,那就要寫12個define,非常不方便,相反,如果使用enum的話就會非常的方便。

#include

enum week

;int

main()

這樣定義後,mon的值為1,tue的值為2,wed的值為3,依次類推。 然後就可以像使用define之後的常量一樣的使用定義的7個值了。

當然也可以為每個列舉的變數都賦值,這樣就和全都用define定義是一樣的了。

3.3 限定變數的範圍

比如我們的應用程式中要處理有關月份的東西,顯然月份只能取1-12中的某個數字,為了保證程式的正確性和健壯性,我們應該使用enum。

#include

enum month

;int

main()

比如像這樣,定義的列舉型別 a 的取值只能是那12個變數中的乙個,如果賦予了其他的變數,編譯器就會報錯。

3.4 enum hack:用於初始化類內陣列

摘自《effective c++》條款02

有時候編譯器(錯誤地)不允許「static 整數型 class常量」完成「in class初值設定」,這時可改用所謂的「the enum hack"補償做法。

其理論基礎為:乙個屬於列舉型別(enumerated type的數值可充當ints來使用。示例如下:

class

gameplayer

;//"the enum hack"——令numturns

//成為5的乙個記號名稱

int scores[numturns]

;//這就沒問題了..

.};int

main()

c語言——enum列舉型別用法解析

c++ enum列舉用法攻略(超詳細)

c++ primer(第5版)

c語言之enum的用法和注意事項(列舉型別)

列舉型別enum用法 Golang 列舉使用

go 語言沒有enum關鍵字的,通過使用const iota可以實現列舉的能力。本篇文章將 幾個問題 為什麼要使用列舉,沒了它就不行嘛?如何在 go 語言中優雅的使用列舉。stackoverflow 上有個問題 what are enums and why are they useful?中的回答很...

列舉型別(enum)

enum 是計算機程式語言中的一種資料型別 列舉型別。應用場景 有些變數的取值被要求在乙個確定的範圍內,例如一周有 7天,一年 12個月,或者使用者自定義的今天安排要學習的百家姓有 4個等等。定義 在列舉型別的定義中列舉出所有的可能取值,該變數的取值只能是所列舉的範圍。格式 enum 列舉名 enu...

enum列舉型別。

列舉 定義常量符號,就是巨集定義常數的集合體 比如 四季,星期,意義相關的常數 狀態機 1 根據當前狀態,這個週期結束,就成了下乙個狀態。2 根據你的當前狀態,還和你的輸入有關。比如 fpga,gui 通過列舉,可以將一些常量賦值給某些固定的字串常量。可以通過改變列舉型別的狀態來達到自己的一些目的。...