团队升级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/

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐