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中已经出现了一次,这里再次出现,会报错

 

posted on 2023-05-19 18:29  新西兰程序员  阅读(45)  评论(0编辑  收藏  举报