强类型枚举以及C++11对原有枚举类型的扩展

强枚举类型

       非强类型作用域,允许隐式转换为整型,占用存储空间及符号性不确定,都是枚举类的缺点。针对这些缺点,新标准C++11引入了一种新的枚举类型,即“枚举类”,又称“强类型枚举”。

语法:在enum后加上关键字class

enum class EnumType 
{
	Point,
	Line,
	Rect
};

优势:

  1. 强作用域,强类型枚举成员的名称不会被输出到其父作用域空间。
  2. 转换限制,强类型枚举成员的值不可以与整型隐式地相互转换。
  3. 可以指定底层类型,强类型枚举默认的底层类型是int,但也可以显式地指定底层类型,具体方法为在枚举名称后面加上“:type”,其中type可以是除wchar_t以外的任何整型。比如:
enum class EnumPerson : char
{
	Man,
	Woman
};

C++11对原有枚举类型的扩展

       相比于原来的枚举,强类型枚举更像一个属于C++的枚举。但为了配合新的枚举类型,C++11还对原有枚举类型进行了扩展。

1. 首先是底层的基础类型方面。在新标准C++11中,原有枚举类型的底层类型在默认情况下,仍然由编译器来具体制定实现。但也可以跟强类型枚举类一样,显式地由程序员来指定。语法同强枚举类型。

enum EnumPerson : char
{
	Man,
	Woman
};

2. 在C++11中,枚举成员的名字除了会自动输出到父作用域,也可以在枚举类型定义的作用域内有效。

enum Type {General, Light, Medium, Heavy};
Type t1 = General;
Type t2 = Type::General;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值