C 11新特性 82 指定enum型別的大小

2021-08-28 22:12:40 字數 1005 閱讀 2224

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個位元組:

這有什麼用?

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

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

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

等等。作者一句話

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

C 11新特性學習

lambda表示式用於建立匿名的函式物件,語法為 函式可訪問的的外部變數 函式引數 返回值型別 如 int a 1,b 2 int c b int x int b 表示函式中可以訪問外部變數b,而且引數b是按值傳遞,b 表示引數b是按引用傳遞,表示可以訪問所有外部變數,並且是用按值傳遞方式,類似,也...

C 11 新特性試用

在c 11之前,auto關鍵字用來指定儲存期。在新標準中,它的功能變為型別推斷。auto現在成了乙個型別的佔位符,通知編譯器去根據初始化 推斷所宣告變數的真實型別。各種作用域內宣告變數都可以用到它。例如,名空間中,程式塊中,或是for迴圈的初始化語句中。auto i 42 i is an int a...

C 11 新特性總結

vs2012以上版本支援 一.auto的使用 auto func less 自動表示函式指標 auto ite vector a.begin 自動表示stl的迭代器 auto p new foo 自動表示變數指標等變數 二.decltype int x 3 decltype x y x 從變數或表示...