C++11 enum

一 C++11前

在C++11前我们关于枚举enum有两个常见的问题,1是无作用域,同一个文件中两个不同枚举中具有同名枚举项就会报错。2是不能确定枚举项的值的整数类型,或者说枚举的底层类型(underlying type)不明确。下面的例子会报错:

enum Type {
  kText = 1,
};

enum Msg {
  kText = 2,
};

 

二 C++11

在C++11中对上述两个问题都做了处理。C++11 enum语法如下:

enum-key attr(optional) enum-name(optional) enum-base(optional)(C++11) 
{ enumerator-list(optional) }	(1)	
enum-key attr(optional) enum-name enum-base(optional) ;	(2)	(since C++11)

enum-key:C++11前就是enum,而从C++11开始可以是enum、enum class 、enum struct之一。对于enum我们叫做无作用域枚举。而enum class和enum struct叫做有作用域枚举或者强类型枚举。下面的例子是正确的:

enum class Type {
  kText = 1,
};

enum class Msg {
  kText = 2,
};

使用时要加上作用域,例如 Type::kText。需要注意的是,强类型枚举值不能隐式转换为整型

// error
int type = Type::kText; 

// correct
int type11 = (int)Type::kText;
int type12 = static_cast<int>(Type::kText);

enum-base:某个整型类型的类型说明符序列(若它为 cv 限定,则忽略其限定性),该类型将作为此枚举类型的固定底层类型。

举例如下:

enum Type : uint8_t{
  kText = 1,
};

三 参考

cppreference

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值