1. 代码示例
#include <iostream>
using namespace std;
//! 1.C++11新版限定作用域的枚举体,增加关键字class,可以避免small,big相同的符号冲突
enum class eggs{ small, big };
enum class he{ small, big };
//! 2.C++11 可以指定枚举体底层类型,底层类型为short
//enum class : short Workday{ Monday, Tuesday };
//! 老版本枚举:非限定作用域的枚举
enum week
{
monday
}
int main()
{
//! 3.赋值
eggs e = eggs::small;
//! 4. C++11 类型转换增加安全性,避免隐式转换,可以显示转换
int a = int(e);
//int a = eggs::small; //< C++11 错误,限定作用域的枚举无法隐式转换;
int b = week::monday; //< 老版本,正确,非限定作用域的枚举可以隐式转换
cin.get();
return EXIT_SUCCESS;
}
2. 枚举类型的前置声明
C++ 11 中,可以提前声明enum。enum的前置声明(无论隐式地还是显示地)必须指定其成员的大小:
enum intValues : unsigned long long; //< 不限定作用域的,必须制定成员类型
enum class open_modes; //< 限定作用域的枚举类型可以使用默认成员类型int
参考书籍
C++ Primer Plus(第6版)——10.6.2 作用域内枚举(c++11)
C++ Primer (第5版)—— 19.3 枚举类型