[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弱枚举类型)