c++11 enum class用法

// C++11之前的enum类型是继承C的,不温不火;

// C++11对enum动刀了,加强了类型检查,推出强类型enum类型,眼前一亮

// 使用过QT 的都知道,早就应该这么做了,用的非常爽!!

// 一、C中enum类型的局限

// 1、非强类型作用域

enum type1{a, b, c};

enum type2{a, d, e};

 

//问题来了,两种枚举类型都有a枚举常量,并且作用域同样,发生了冲突

​​​​​​​//2、同意隐式类型转换

​​​​​​​if(type1::a == type2::d){;}

​​​​​​​//两种不同enum常量比較没有实际意义,可是编译器是先将enum常量转换为int类型后,再比較的,不会报错

​​​​​​​// 3、占用存储空间极其符号不确定

​​​​​​​enum type3{a=1, b=0xFFFFFFFFFLL};

cout<<sizeof(type3::a)<<endl;//可能为8,视编译器而定,由其对齐字长决定的

cout<<type3::b<<endl;//输出大小不定,可能为0

​​​​​​​//问题来了,存储大小和符号都有未定的因素

​​​​​​​// 二、C++11强类型enum类型

​​​​​​​//语法:

​​​​​​​enum class type4:type{a, b, c};//加class,具名,指定底层类型type

enum class type5{a, b, c};//不指定底层类型

​​​​​​​//特点及使用方法:

// 1、强作用域

​​​​​​​type4 t = type4::a; //必须指定强类型名称

type4 p = a; //错误

​​​​​​​//2、不可隐式转换

​​​​​​​if(t<type4::b); //同一个enum类型比較,能够

if(t>type5::b); //非同一个enum类型,不能隐式转换为int等值,不嗯呢该比較

if((int)t > (int)type5::b) //强制类型转换,能够通过

​​​​​​​//3、能够指定底层类型

​​​​​​​enum class type6:char{a=1, b=2};

enum class type7:unsigned int{a=0xFFFFFFFF};

​​​​​​​//既能够节省空间,又能够指定符号

​​​​​​​//三、C++11是兼容并拓展了C enum类型的

​​​​​​​enum type8:char{a=1, b=2};

type8 t =a;

​​​​​​​//拓展并兼容C enum类型

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值