C++中使用强类型的Enum Class
在C++中,有Enum class这种说法,在Effective modern C++ 这本书中,也提到Prefer scoped enums to unscoped enum, 就是说要用有范围的enum class代替没有范围的enum. 为什么会有这个问题呢?
我们来看一个C++里面使用传统enum的例子:
enum Shape {circle,retangle}; auto circle = 10; // 这里会报错, 报error
这个出现错误,你可能会觉得挺奇怪的,因为在C#里面,类似的代码是没有问题的。但是在C++中,就是不行。 原因如下 =>
在C++中,你定义一个enum类型,比如上面的 enum Shape {circle,retangle}, 它其实等价于
#define circle 0 #define retangle 1
所以,你后面用auto再去定义一个circle, 这时系统就会报错。 =》 这也就是说,在C++中,不管枚举名是否一样,里面的成员只要有一致的时,就会出现问题, 比如
enum A {a,b}; enum B {c,a}; //里面的成员a,在上面的枚举A中已经出现了一次,这里再次出现,会报错