文章目录
c++11中新的枚举
c++11 中引入了enum class, 相对于传统的enum. 克服了以下传统问题:
- 传统enum可隐式转换为int, 对不想如此的编程人员会造成错误
- 传统enum会将其范围提升为全局, 可能会造成名字冲突
- 传统enum底层类型无法指定, 造成误解, 兼容性问题和不能前向声明
简单例子:
enum Level
{
easy,
mid,
hard,
};
enum class Weapon; // 先声明
Weapon get(); // 使用
enum class Weapon // 最后定义
{
stick,
knife,
sword,
};
if (0 == easy) { // 这个是没问题的
std::cout << "easy" << std::endl;
}
if (0 == Weapon::stick) { // 这个在c++11中是错误, 编译不通过
std::cout << "stick" << std::endl;
}
Weapon a = stick; // 错误, 范围不对. 必须用 Weapon::stick 来赋值