深入现代 C++:enum class 全面解析
本篇摘要在 C11 中引入了 枚举类enum class它是对传统 enum 的现代化改进解决了传统枚举的多个问题如命名冲突、隐式类型转换、作用域污染等。一·传统枚举如代码语言javascriptAI代码解释enum Color { RED, GREEN, BLUE }; enum Light { RED, // 编译错误命名冲突 YELLOW };我们会发现枚举的成员有冲突因此会导致下面编译的报错传统 enum 存在的问题命名冲突不同枚举之间不能有相同的名字就是这个例子作用域污染枚举值暴露在全局或当前命名空间比如这里我们可以直接通过外接访问到这个成员隐式转换枚举值可以自动转换为int下面我们运行下代码语言javascriptAI代码解释roothcss-ecs-7d13:/home/sw/linux_learn/extra_knowledge/enum_class# ./a.out 0发现结果就是0明显自动隐式转换了。安全性差容易误用、类型不安全。这里就是我们上面暴露的问题的总结了因此下面我们引入了C的枚举类二·C的枚举类首先总结下它的特点也就是对上面缺点的修正特性说明作用域隔离枚举值只能通过 枚举类名::值 访问类型安全不允许隐式转换为 int可指定底层类型可控制枚举值的存储大小可读性高代码结构清晰易于维护具体用法剖析一般形式当然我们一般默认成员都显转int因此底层类型一般不写代码语言javascriptAI代码解释enum class 枚举类名 [: 底层类型] { 枚举值1, 枚举值2, ... };简单使用比如还是那上面我们那个例子说明代码语言javascriptAI代码解释enum class Color { Red, Green, Blue }; enum class Light :uint32_t{ Red, Yellow };此时再编译就不会报错了
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2410720.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!