C++11允许我们定义 scoped enumeration(作用域的枚举)--又称为 strong enumeration 或 enumeration class。这是C++ enumeration value(或 enumerator(枚举符))的一个比较干净的实现。
其声明格式为:
enum class 枚举名:类型 //若没有声明类型,则默认为 int
{
枚举元素表列;
}
例如:
enum class Salutation : char { mr , ms , co , none };
Salutation s = Salutation :: mr ;
对于 Scoped enumeration 有以下优点:
* 绝不会隐式转换为至/自 int 类型。
* 如果数值(例如 mr)不在 enumeration 被声明的作用域内,你必须改写为 Salutation::mr ;
* 你可以明显定义低层类型(对于上述例子中,低层类型为 char )并因此获得一个保证大小的类型。
* 对于如果只有类型被使用,提前声明 枚举类型也是可以的,那会消除“为了新的 enumerations
value 而重新编译”的必要。
enum 与 enum class 的区别:
enum MyEnum1
{
MY_FIRST ;
MY_SECONEND ;
}
enum MyEnum2
{
MY_FIRST ; //重复定义
MY_SECONEND ; //重复定义
}
enum MyEnum1
{
MY_FIRST ;
MY_SECONEND ;
}
enum MyEnum2 //可使用相同变量名
{
MY_FIRST ;
MY_SECONEND ;
}
对于不限定作用域的 enum 在同一作用域下,枚举量名不能相同,但限定作用域的 enum class 的枚举量作用域只在 {} 中
enum 的枚举量必须是(数值 is_integral),而不能是(字面常量 is_literal),例如不能使用 const char *类型。



