C++11:强类型枚举(enum)

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

  2. // C++11之前的enum类型是继承C的,不温不火;  
  3. // C++11对enum动刀了,加强了类型检查,推出强类型enum类型,眼前一亮  
  4. // 使用过QT 的都知道,早就应该这么做了,用的很爽!!  
  5.   
  6. // 一、C中enum类型的局限  
  7. // 1、非强类型作用域  
  8.   
  9. enum type1{a, b, c};  
  10. enum type2{a, d, e};  
  11.   
  12. //问题来了,两种枚举类型都有a枚举常量,而且作用域相同,发生了冲突  
  13.   
  14. //2、允许隐式类型转换  
  15.   
  16. if(type1::a == type2::d){;}  
  17.   
  18. //两种不同enum常量比较没有实际意义,但是编译器是先将enum常量转换为int类型后,再比较的,不会报错  
  19.   
  20. // 3、占用存储空间极其符号不确定  
  21.   
  22. enum type3{a=1, b=0xFFFFFFFFFLL};  
  23. cout<<sizeof(type3::a)<<endl;//可能为8,视编译器而定,由其对齐字长决定的  
  24. cout<<type3::b<<endl;//输出大小不定,可能为0  
  25.   
  26. //问题来了,存储大小和符号都有未定的因素  
  27.   
  28. // 二、C++11强类型enum类型  
  29.   
  30. //语法:  
  31.   
  32. enum class type4:type{a, b, c};//加class,具名,指定底层类型type  
  33. enum class type5{a, b, c};//不指定底层类型  
  34.   
  35. //特点及用法:  
  36. // 1、强作用域  
  37.   
  38. type4 t = type4::a; //必须指定强类型名称  
  39. type4 p = a;        //错误  
  40.   
  41. //2、不可隐式转换  
  42.   
  43. if(t<type4::b);                   //同一个enum类型比较,可以  
  44. if(t>type5::b);                   //非同一个enum类型,不能隐式转换为int等值,不嗯呢该比较  
  45. if((int)t > (int)type5::b)        //强制类型转换,可以通过  
  46.   
  47. //3、可以指定底层类型  
  48.   
  49. enum class type6:char{a=1, b=2};  
  50. enum class type7:unsigned int{a=0xFFFFFFFF};  
  51.   
  52. //既可以节省空间,又可以指定符号  
  53.   
  54. //三、C++11是兼容并拓展了C enum类型的  
  55.   
  56. enum type8:char{a=1, b=2};  
  57. type8 t =a;  
  58.   
  59. //拓展并兼容C enum类型  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值