enum用法小記

來源:互聯網
上載者:User

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

enum em<br />{<br />a =0,<br />b,<br />c,</p><p>NONE = 0xffffffff<br />} 

 

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

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

map<em, string> mp;

這樣,使用時,我要根據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)是需要的,考慮到兩者表示的數的範圍相同。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.