enum class/enum

enum是非域化枚举

例:

enum color{Red};

enum color2{Red};//err

1.新增枚举成员

enum在声明时,编译器会选择占用内存最小的一种潜在类型 (underlying types),来代表每一个枚举

成员

例:

enum color{Red};

缺点

当新增一个枚举成员时 (如下 audited ),整个系统将会被重新编译一遍,即使只

有一个很简单的函数使用了新加的枚举成员 (audited)

+class使其成为域化枚举

1.防止命名空间污染

例:

enum color{Red};

enum class color{Red};//ok

2.强类型枚举

非域化的枚举成员,可以隐式的转换为广义整型

域化的枚举成员,不可以隐式的转换为广义整型

3.前置声明

enum class支持前置声明,即不用初始化枚举成员,声明一个枚举类型

例:

enum class color;

4.新增枚举成员

当新增枚举成员时,包含这些声明的头文件并不需要重新编译,源文件则根据新枚举

成员的使用情况来决定是否重新编译:新成员没被使用则不需要哦重新编译

5.潜在类型

enum class 的潜在类型 (underlying type),缺省为 int 型,当然也可自定义潜在类型。无论哪种方式,

编译器都会预先知道枚举成员的大小

区别

1)C++98 的 enum 是“非域化的”;而 C++11 的 enum class 是“域化的”,限制了枚举成员只在域内可见

2) enum class 的缺省潜在类型 (underlying type) 是 int 型,而 enum 没有缺省潜在类型

3) enum class 一般总是前置声明,而 enum 只有在指定了潜在类型时才可以是前置声明

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值