enum用法小記

2021-05-11 12:30:59 字數 844 閱讀 9556

enum是大家都比較喜歡用的一種結構,有助提供清晰的邏輯,有點技巧能使其更有用。

以前經常看到這樣的**,不知其最後的none也何用,今天實際碰到時,才知道是多麼美妙的技巧啊。

一般的,用int i = b; 這樣的寫法,肯定是沒問題的,顯然,在這裡 i 等於1,但是,如果我要將int轉換為enum值,典型的情況,我用enum做為map的key:

mapmp;

這樣,使用時,我要根據key來獲取string,但是這個em可能不是以em的形式出現的,為了擴充套件性,很可能到你手裡就是乙個int i 變數,即需要 mp.find(i); 來查詢,這樣就遇到了這個問題,如何將int轉換成enum?

enum之所以稱為enum,無非是為了節省記憶體,加快速度,很可能的,如果乙個enum裡的元素只有10,20,那麼乙個位元組就夠儲存表示它了,此時,你用乙個int來轉成enum就會很麻煩,你可能會想到如果乙個int的值乙個位元組裝的下,那麼:

em e = (byte)i;

這樣應該就可以了,但是實際情況顯然更加複雜。你不能保證一種可行的方案是否在其他的編譯器上通過,畢竟enum的大小不是你能預見的(根據不同的編譯器,以及enum所表示的內容)。

但是,我們卻可以人工使他維持在乙個穩定的記憶體大小狀態,通過在使用上面的寫法,最後的none是乙個這樣的數,0xffffff,這在無符號數中是最大的,一般我們用enum是從0開始的,這樣,就表示了整個無符號數的大小。所以這個enum基本是就是乙個4位元組大小的物件了,反正不會小於4位元組,至於大於的情況,我是沒遇到。

接著,就可以通過這樣:

em e = (em)((dword)i);

來將int i 轉換成em,將i轉為(dword)是需要的,考慮到兩者表示的數的範圍相同。

列舉enum學習小記

1 列舉enum的用途淺例 寫程式時,我們常常需要為某個物件關聯一組可選alternative屬性.例如,學生的成績分a,b,c,d等,天氣分sunny,cloudy,rainy等等。const int input 1 const int output 2 然後,呼叫以下函式 bool open f...

Enum用法小結

enums列舉是值型別,資料直接儲存在棧中,而不是使用引用和真實資料的隔離方式來儲存。1 預設情況下,列舉中的第乙個變數被賦值為0,其他的變數的值按定義的順序來遞增 0,12,3.因此以下兩個 定義是等價的 csharp view plain copy enum trafficlight cshar...

enum型別的用法

1 enum元素的值如果不指定,它會自行根據其前面的值生成乙個自己的值。如 typedef enum em ee aee,bee 2,cee,dee 7,eee 補 gcc中需加上別名 其中aee為0,cee為3,eee為8 2 enum型別可以把型別定義和變數定義分開,也可以放在一起,如 1 en...