时间:2021-05-04 10:47:17 | 栏目:C代码 | 点击:次
枚举就是定义一个类别,并且穷举统一类别下的个体以供代码使用。
enum PUBLIC_COLOR { RED, YELLOW, GREEN }; enum PRIVATE_COLOR { RED, BLACK, PURPLE }; // RED 重定义 enum PUBLIC_COLOR { WHITE, GRAY }; // PUBLIC_COLOR 重定义 int main() { int color = RED; cout << color << endl; }
你可能会想到使用命名空间来封装枚举类型,但是如果其中的某个命名空间漏写了名字则会变成匿名空间,而匿名空间中的所有枚举成员会默认变成全局命名空间下的成员。因此这种方法是不合适的。
enum class enum_name: elem_type { elem1, elem2, ... };
enum class PUBLIC_COLOR { RED, GREEN, BLACK }; // ok enum PRIVATE_COLOR { RED, PURPLE, PINK = 1 }; // ok
enum class PUBLIC_COLOR { RED, GREEN, BLACK }; enum PRIVATE_COLOR { RED, PURPLE, PINK = 1 }; if (PUBLIC_COLOR::GREEN == 1) { // errror: 未定义可接受的类型转换 cout << "color1 == 1" << endl; } if (PRIVATE_COLOR::PURPLE == 1) { // ok cout << "color2 == 1" << endl; }
enum class PUBLIC_COLOR: char { RED, GREEN, BLACK }; enum PRIVATE_COLOR: int { RED, PURPLE, PINK }; cout << sizeof(PUBLIC_COLOR::GREEN) << endl; // 1 cout << sizeof(PRIVATE_COLOR::PURPLE) << endl; // 4
enum class PUBLIC_COLOR { RED, GREEN, BLACK }; enum PRIVATE_COLOR { RED, PURPLE, PINK = 1 }; if (PUBLIC_COLOR::GREEN == PRIVATE_COLOR::PURPLE) { // errror cout << "PUBLIC_COLOR::GREEN == PRIVATE_COLOR::PURPLE" << endl; } if (PRIVATE_COLOR::PURPLE == PRIVATE_COLOR::PINK) { // ok cout << "PRIVATE_COLOR::PURPLE == PRIVATE_COLOR::PINK" << endl; }
enum class PUBLIC_COLOR: char { RED, GREEN, BLACK }; enum PRIVATE_COLOR: int { RED, PURPLE, PINK }; cout << static_cast<int>(PUBLIC_COLOR::RED) << endl; // 0 cout << static_cast<int>(PRIVATE_COLOR::PURPLE) << endl; // 1