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   新西兰程序员  阅读(61)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2016-05-19 转载 C#中敏捷开发规范
2016-05-19 转载 C#中使用结构来传递多个参数
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示