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
原文链接: https://www.cnblogs.com/rainbow-xiaojian/p/9062999.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/274355
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!