强类型枚举以及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;

 

你可能感兴趣的:(强类型枚举,C++11)