[c++]enum class

Posted 安柏霖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[c++]enum class相关的知识,希望对你有一定的参考价值。

团队升级c++17有一段时间了,一些个语言特性在逐步的实践中开始使用;
最近聊到的,并且落到编程规范中的就是enum class;

传统enum

传统的enum,我个人是非常喜欢的,在当年阅读quake代码的时候,也看见各种位操作,觉得很酷;
enum有两个点非常的好:

  • 值本身有一个名字,可读性非常的好
  • 值本身正常情况下是做int,非常的轻量级
    难得到兼顾性能和可读性的东东;

在c++11开始的enum class,可以说在把enum大型项目里的问题进行了改进;
传统的enum有这几个问题:

  • 起名字彼此之间容易重复
  • enum里的值还会影响全局的各个地方的起名字,特别的烦
  • 然后没有type
    项目大了之后,这都是问题;

c++11 enum class

enum class就规避了这些问题

  • 有类型,使用的时候是要带上类的名字,名字污染的问题就好多了
  • 各种underlytype的操作(int相关的)会变麻烦,不过这个也就还好,很容易写一个util class来处理这个,enum就还是做好自己enum的工作是最好的
  • 而且也有了自己的type,可以更好的规避各种问题

最后项目中代码规范中规定,enum需要使用enum class来处理;

reference

https://en.cppreference.com/w/cpp/language/enum
https://www.geeksforgeeks.org/enum-classes-in-c-and-their-advantage-over-enum-datatype/

以上是关于[c++]enum class的主要内容,如果未能解决你的问题,请参考以下文章

C语言枚举和C++枚举的区别?enum class(C++11强类型枚举(Strongly-typed enums)强枚举 Scoped Enumerations)(C++98弱枚举类型)

C语言枚举和C++枚举的区别?enum class(C++11强类型枚举(Strongly-typed enums)强枚举 Scoped Enumerations)(C++98弱枚举类型)

Effective C++条款 02:尽量以 const, enum, inline 替换 #define

Android中是否推荐使用枚举Enum

C++数据结构——顺序栈(基本代码实现与案例)

C#如何将枚举类(enum)型转换成字符(string)类型