C++ 11 enum 強類型枚舉


 1 // C++11之前的enum類型是繼承C的,不溫不火;  
 2 // C++11對enum動刀了,加強了類型檢查,推出強類型enum類型,眼前一亮  
 3 // 使用過QT 的都知道,早就應該這么做了,用的很爽!!  
 4   
 5 // 一、C中enum類型的局限  
 6 // 1、非強類型作用域  
 7   
 8 enum type1{a, b, c};  
 9 enum type2{a, d, e};  
10   
11 //問題來了,兩種枚舉類型都有a枚舉常量,而且作用域相同,發生了沖突  
12   
13 //2、允許隱式類型轉換  
14   
15 if(type1::a == type2::d){;}  
16   
17 //兩種不同enum常量比較沒有實際意義,但是編譯器是先將enum常量轉換為int類型后,再比較的,不會報錯  
18   
19 // 3、占用存儲空間極其符號不確定  
20   
21 enum type3{a=1, b=0xFFFFFFFFFLL};  
22 cout<<sizeof(type3::a)<<endl;//可能為8,視編譯器而定,由其對齊字長決定的  
23 cout<<type3::b<<endl;//輸出大小不定,可能為0  
24   
25 //問題來了,存儲大小和符號都有未定的因素  
26   
27 // 二、C++11強類型enum類型  
28   
29 //語法:  
30   
31 enum class type4:type{a, b, c};//加class,具名,指定底層類型type  
32 enum class type5{a, b, c};//不指定底層類型  
33   
34 //特點及用法:  
35 // 1、強作用域  
36   
37 type4 t = type4::a; //必須指定強類型名稱  
38 type4 p = a;        //錯誤  
39   
40 //2、不可隱式轉換  
41   
42 if(t<type4::b);                   //同一個enum類型比較,可以  
43 if(t>type5::b);                   //非同一個enum類型,不能隱式轉換為int等值,不嗯呢該比較  
44 if((int)t > (int)type5::b)        //強制類型轉換,可以通過  
45   
46 //3、可以指定底層類型  
47   
48 enum class type6:char{a=1, b=2};  
49 enum class type7:unsigned int{a=0xFFFFFFFF};  
50   
51 //既可以節省空間,又可以指定符號  
52   
53 //三、C++11是兼容並拓展了C enum類型的  
54   
55 enum type8:char{a=1, b=2};  
56 type8 t =a;  
57   
58 //拓展並兼容C enum類型 

FROM : https://blog.csdn.net/hustyangju/article/details/41978973?utm_source=tuicool&utm_medium=referral


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM