传统的枚举类型不是类型安全的,会被视作整数。
C++11 枚举类型是类型安全的:不能够被隐式的转换为整数,同时也不能够将其与整数数字进行比较,更不可能对不同的枚举类型的枚举值进行比较。相当于是创建了一个新的类型。
使用冒号及类型关键字来指定枚举中枚举值的类型。
enum class new_enum:unsigned int{
value1,
value2,
value3 = 100,
value4 = 100};
输出时,需要进行一次强制类型转换,或者重载operator<<操作符:
#include<iostream>
template std::ostream& operator<<(typename std::enable_if::value, std::ostream>::type& stream, const T& e)
{
return stream << static_cast::type>(e);
}
网友评论