C++ enum(枚舉)工具

C++ 的 enum 工具提供了另一種創(chuàng)建符號常量的方式努咐,這種方式可以替代 const。它還允許定義新類型,但必須按嚴格的限制進行熙揍。使用 enum 的語法與使用結構體相似。

enum DemoEnum {
    demoOne,
    demoTwo,
    demoThree
};

默認情況下氏涩,將整數(shù)值賦給枚舉量届囚,第一個枚舉值為 0,第二個為 1是尖,依次類推意系。可以通過顯式地指定整數(shù)值來覆蓋默認值饺汹。

可以用枚舉名來聲明這種類型變量:

DemoEnum myDemoEnum;

枚舉類型變量具有一些特殊屬性:

  • 1.在不進行強制類型轉(zhuǎn)換的情況下蛔添,只能將定義枚舉時使用的枚舉量賦給這種枚舉的變量:
myDemoEnum = demoThree;   // 正確
myDemoEnum = 20;  // 錯誤

因此,myDemoEnum 變量受到限制兜辞,只有 3 個可能的值(為保證最大的可移植性迎瞧,應將把非 enum 值賦給 enum 變量視為錯誤)。

  • 2.對于枚舉逸吵,只定義了賦值操作符夹攒。具體地說,沒有為枚舉變量定義算術運算:
myDemoEnum = demoOne;    // 正確
++myDemoEnum;    // 錯誤
myDemoEnum = demoOne + demoTwo;  // 錯誤

為了獲得最大限度的可移植性胁塞,應采納較嚴格的限制咏尝。

  • 3.枚舉量是整型压语,可被提升為int類型,但int型不能自動轉(zhuǎn)換為枚舉類型:
int demoNum = demoThree;    //正確
myDemoEnum = 2;    //錯誤
demoNum = 4 + demoOne;    //正確
demoNum = demoTwo + demoOne;    //正確
  • 4.如果int值是有效的编检,則可以通過強制類型轉(zhuǎn)換胎食,將它賦給枚舉變量:
myDemoEnum = DemoEnum(1);   //正確

如果試圖對一個不適當?shù)闹颠M行強制類型轉(zhuǎn)換,將出現(xiàn)什么情況允懂?結果是不確定的厕怜,這意味著這樣做不會出錯,但不能以來得到的結果:

myDemoEnum = DemoEnum(88);  // 結果是不確定的
  • 5.正如看到的那樣蕾总,枚舉的規(guī)則相當嚴格粥航。實際上,枚舉更常被用來定義相關的符號常量生百,而不是新類型递雀。例如,可以用枚舉來定義 switch 語句中使用的符號常量蚀浆。

  • 6.如果打算只使用常量缀程,而不創(chuàng)建枚舉類型的變量,則可以省略枚舉類型的名稱市俊,如下面的例子所示:

enum { red, orange, yellow, green, blue };
  • 7.可以使用賦值操作符來顯示地設置枚舉量的值:
enum { red=1, orange=2, yellow=4, green=8, blue=16 };

指定的值必須是整數(shù)杨凑。也可以只顯示地定義其中一些枚舉量的值:

enum { red, orange, yellow=50, green, blue };

這里,red 在默認時為 0摆昧,后面沒有被初始化的枚舉量的值將比其前面的枚舉量大 1撩满。因此,orange 為 1绅你,green 為 51鹦牛,blue 為 52。
可以創(chuàng)建多個值相同的枚舉量:

enum { red, orange=0, yellow, green=1, blue };

其中勇吊,red、orange 都為 0窍仰,yellow汉规、green 都為 1,blue 為 2驹吮。

  • 8.除了 int 類型针史,還可以將 long 類型賦給枚舉量
  • 9.枚舉的取值范圍
    每個枚舉都有取值范圍,通過強制類型轉(zhuǎn)換碟狞,可以將取值范圍內(nèi)的任何整數(shù)值賦給枚舉變量啄枕,即使這個值不是枚舉值。例如:
enum myColor { red=1, orange=2, yellow=4, green=8, blue=16 };
myColor flagColor;

則下面的語句是合法的:

flagColor = myColor(13);

枚舉的取值范圍定義如下族沃。首先要找出上限频祝,需要知道枚舉量的最大值泌参。找到大于這個最大值的、最小的 2 的冪常空,將它減去 1沽一,得到的便是取值范圍的上限。例如漓糙,myColor的最大值是16铣缠。在 2 的冪中,比這個數(shù)大的最小值為 32昆禽,因此取值范圍的上限為 31蝗蛙。要計算下限,需要知道枚舉量的最小值醉鳖。如果它不小于 0捡硅,則取值范圍的下限為0;否則辐棒,采用與尋找上限方式相同的方式病曾,但加上負號。例如漾根,如果最小的枚舉量為 -6泰涂,而比它小的、最大的 2 的冪是 -8(加上負號)辐怕,因此下限為 -7逼蒙。

選擇用多少空間來存儲枚舉由編譯器決定。對于取值范圍較小的枚舉寄疏,使用一個字節(jié)或更少的空間是牢;而對于包含 long 類型值的枚舉,則使用 4 個字節(jié)陕截。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市农曲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌形葬,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件暮的,死亡現(xiàn)場離奇詭異笙以,居然都是意外死亡,警方通過查閱死者的電腦和手機猖腕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谈息,“玉大人缘屹,你說我怎么就攤上這事∠莱穑” “怎么了轻姿?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵逻炊,是天一觀的道長互亮。 經(jīng)常有香客問我余素,道長,這世上最難降的妖魔是什么桨吊? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任视乐,我火速辦了婚禮洛搀,結果婚禮上佑淀,老公的妹妹穿的比我還像新娘。我一直安慰自己伸刃,他們只是感情好,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布景图。 她就那樣靜靜地躺著碉哑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谭梗。 梳的紋絲不亂的頭發(fā)上宛蚓,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機與錄音远舅,去河邊找鬼闰蛔。 笑死图柏,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蚤吹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼繁涂,長吁一口氣:“原來是場噩夢啊……” “哼二驰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起桶雀,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎全肮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倔矾,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡柱锹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年禁熏,在試婚紗的時候發(fā)現(xiàn)自己被綠了壤巷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞧毙。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖矩动,靈堂內(nèi)的尸體忽然破棺而出释漆,到底是詐尸還是另有隱情悲没,我是刑警寧澤男图,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布甜橱,位于F島的核電站栈戳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏子檀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一堰乔、第九天 我趴在偏房一處隱蔽的房頂上張望脐恩。 院中可真熱鬧,春花似錦驶冒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诅炉。三九已至屋厘,卻和暖如春涕烧,著一層夾襖步出監(jiān)牢的瞬間汗洒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工瞻凤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留世杀,地道東北人阀参。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓蛛壳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親炕吸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,234評論 0 4
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,812評論 1 10
  • 第三章 基本概念 3.1 語法 ECMAScript標識符一般采用駝峰大小寫格式蒸矛,也就是第一個字母小寫瀑罗,剩下的每個...
    小雄子閱讀 545評論 0 1
  • 第一章: JS簡介 從當初簡單的語言斩祭,變成了現(xiàn)在能夠處理復雜計算和交互,擁有閉包摧玫、匿名函數(shù), 甚至元編程等...
    LaBaby_閱讀 1,672評論 0 6
  • Enum可以把一組相關常量定義在一個class中诬像,且class不可變闸婴,而且成員可以直接比較坏挠。py2版本需要pip安...
    徐子鑑閱讀 291評論 0 0