最近遇到一个新的枚举写法,enum class ,一查才晓得是c++11的新特性强类型枚举,强在哪里呢?
我们来定义两个枚举类型
enum Color {black,orange,white};
enum Fruits {orange,apple};//error:重定义
这是因为enum的成员名字全局可见。
强类型枚举写法这样写:
enum class Color {black,orange,white};
enum class Fruits {orange,apple};
既然现在允许共同名字的enum 成员了,使用时就要在枚举值前加枚举类型,例如:
Color c1=orange; //error :使用未定义orange
Color c2=Color::orange;//正确
旧的写法是支持隐士类型转换的,我们可以直接给int型的变量赋值;
强类型枚举不支持;
enum Fruits {orange,apple};
int c1=apple;
enum class Color {black,orange,white};
int c1=Color::black; // error: C2440: “初始化”: 无法从“testEnum::Color”转换为“int”