第 22 講:枚舉
前文解決了兩種需要帶關(guān)鍵字的自定義類型:結(jié)構(gòu)體和共用體,它們的用法也是各有各的好處和奇特之處。今天我們來(lái)看一種新的帶關(guān)鍵字的類型:枚舉類型(Enumerations)。
什么是枚舉類型?
枚舉類型一般用于列舉一些特殊情況時(shí),特別這些情況的范圍僅僅只有可以數(shù)出來(lái)的幾種情況的時(shí)候,我們就可以使用這種類型,例如星期。
我們可以使用枚舉類型為星期定義一個(gè)枚舉類型,寫法是這樣的:
我們把枚舉的每一個(gè)數(shù)值放到枚舉的大括號(hào)里,然后把每一個(gè)枚舉數(shù)值寫進(jìn)去就可以了。枚舉類型一般是需要對(duì)應(yīng)數(shù)值使用的,否則我們無(wú)法做到靈活使用枚舉的效果。所以我們一般都會(huì)配合整數(shù)使用,為每一個(gè)枚舉數(shù)值賦一個(gè)整數(shù)值;當(dāng)然,如果不賦值,那么從第一個(gè)元素開始,就以 0 為起始點(diǎn)開始往下順序默認(rèn)賦值;如果為其某一個(gè)數(shù)值賦值,那么后面的元素不賦值也可以得到默認(rèn)數(shù)值,這些數(shù)值就從賦值的數(shù)值開始自動(dòng)遞增 1 個(gè)單位。
這個(gè)寫法等價(jià)于前者。
當(dāng)然,如果 monday
字段不賦值的話,那么整體就會(huì)從 0 開始計(jì)算,即 monday
賦值為 0、tuesday
賦值為 1、wednesday
賦值為 2,等等。
使用
枚舉類型出乎意料得好用。為什么這么說(shuō)呢?因?yàn)槊杜e類型一般都不會(huì)用類型名稱(即這里的 enum week
,當(dāng)然有時(shí)候也可以用上),而大多直接把里面的數(shù)值代入到指定位置上去就完成了使用。比如:
從代碼里可以發(fā)現(xiàn),每一個(gè) case
標(biāo)簽處跟的直接是枚舉字段,而且不需要使用成員訪問(wèn)運(yùn)算符這種奇怪的東西,也不需要類型名稱來(lái)作為輔助操作。
實(shí)際上,我們也可以從這種角度認(rèn)為,bool
是一種枚舉類型,因?yàn)樗穆暶髡Z(yǔ)句可以是這樣的。
這樣 false
字段就賦值為 0,而 true
自動(dòng)賦值為 1。
枚舉類型的內(nèi)存大小
當(dāng)然,bool
類型并不是這么簡(jiǎn)單,因?yàn)?bool
僅僅占據(jù)一個(gè)字節(jié),而枚舉類型需要整數(shù)的依托,所以枚舉類型的大小一般是 4 個(gè)字節(jié)(即 int
占據(jù)多大,枚舉就多大)。