1. 程式人生 > >C++11新特性(82)-指定enum型別的大小

C++11新特性(82)-指定enum型別的大小

enum型別有多大?

這並不是一個簡單的問題,需要分情況討論。

 

沒有指定作用域的情況

列舉型別的大小會隨著列舉值的範圍自動調整。例如下面的程式碼:

enum_1只有兩個列舉值,它的大小就是4個位元組;enum_2的第一個列舉值指定了一個超過32位的數,所以大小被自動調節為8個位元組。

 

指定了作用域的情況

列舉型別的大小的預設值是4,也就是一個int的大小。例如下面的程式碼:

scope_enum_1的大小可以正確輸出,scope_enum_2由於指定了超過32位的值,直接引發編譯錯誤。

 

指定enum的大小

C++11新標準中,允許使用enum型別名後接冒號加型別的方式來指定列舉型別的大小。例如我們可以將scope_enum_2的大小指定位8個位元組:

這有什麼用?

簡單說當然就是可以指定列舉型別的大小了。當然只是這樣說是沒有辦法令人信服的,於是我們就舉幾個例子:

  1. 希望節省記憶體空間的情況

  2. 在不同的作業系統,不同應用,或者應用的不同版本之間以列舉值交換資料時(檔案或通訊),用於避免資料型別的不相容。

  3. 等等。

 

作者一句話

精確設計算是作者本人的一個小目標,而指定enum的大小就是實現精確設計的一個小道具之一。

 

示例程式碼下載地址

https://github.com/xueweiguo/OOThinking/blob/master/SizeOfEnum.cpp

 

覺得本文有幫助?請分享給更多人。

閱讀更多更新文章,請掃描下面二維碼,關注微信公眾號【面向物件思考】