1 enum class定义
在传统 C++ 中,枚举类型并非类型安全,枚举类型会被视作整数,则会让两种完全不同的枚举类型可以进行直接的比较, 甚至枚举类型的枚举值名字不能相同。
C++11引入了枚举类, 使用enum class进行定义。枚举类不能够被隐式的转换为整数,同时也不能够将其与整数数字进行比较,更不可能对不同的枚举类型的枚举值进行比较。但相同枚举值之间如果指定的值相同,那么可以进行比较:
enum class new_enum
value1 ,
value2 ,
value3 = 100 ,
value4 = 100
};
//比较
if ( new_enum :: value3 == new_enum :: value4 ) {
// 输出
std :: cout << " new_enum :: value3 == new_enum :: value4 " << std :: endl ;
}
2 非int型的enum
枚举类默认是int
类型,也可以指定其他整型相关的类型,格式如下:
enum class Punctuation : char
{
Comma = ',',
Exclamation = '!',
Question='?'
};
3 导入枚举类命名空间
从上面的例子可以看出,使用枚举类的值时,必须使用**类名::值**
的格式,和传统C++中enum结构不一样了。如果需要直接引用枚举值,有一个简单的方法:导入枚举类命名空间:
enum class Day { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
using enum Day; // All Day enumerators can be used without specifying 'Day::'
Day today = Friday; // Compiles now (of course, Day::Friday would still work as well)
当然这是using
的功能,并不是枚举类独有的。(参照using的三个功能:1 类型与声明)。