[C++][enum] enum和enum class的差异

1 简介

在C++中,有两种方式可以定义枚举类型:enum 和 enum class。它们在以下几个方面有所不同:

  • 作用域限定性
  • 隐式转换
  • 底层类型的指定
  • 枚举值的访问

2 作用域限定性

  • enum:枚举值的名称在相同作用域下是可见的,可能会导致名称冲突。
  • enum class:枚举值的名称在枚举类的作用域内是局部的,不会与其他作用域中的名称冲突。

3 隐式转换

  • enum:枚举值可以隐式转换为其底层类型(通常是整数类型),并且可以与整数类型进行比较。
  • enum class:枚举值不会隐式转换为其底层类型,需要显式转换为底层类型,它们与整数类型之间没有隐式的比较操作。

4 底层类型的指定

  • enum:底层类型可以是 int、unsigned int、char 等整数类型,默认情况下是 int。
  • enum class:底层类型可以是任何整数类型,包括枚举类本身不具备的类型(例如 long、unsigned long long 等)。

5 枚举值的访问

  • enum:枚举值可以直接使用枚举值的名称。
  • enum class:枚举值需要通过作用域解析运算符 :: 来访问,例如 EnumClassName::EnumValue。

总结

总体来说,使用 enum class 更加安全和强类型化,可以避免一些常见的问题,如名称冲突和意外的隐式转换。如果你希望枚举类型具有更严格的类型检查和作用域限定性,建议使用 enum class。如果你只需要简单的枚举类型,可以使用传统的 enum。

相关推荐
Dovis(誓平步青云)5 分钟前
拖动关键帧角色就抽动,动画编辑器怎样补齐中间状态
开发语言·前端·javascript·机器学习·编辑器
行走的陀螺仪9 分钟前
Claude Code 从入门到实战(二):Bash工具、Plan模式与后台任务
开发语言·bash
郝学胜-神的一滴9 分钟前
游戏设计:原型与开发 19:U3D工位布置与性格说明书
人工智能·算法·unity·unreal engine·游戏策划·游戏设计
東隅已逝,桑榆非晚12 分钟前
红黑树:从概念到实现
数据结构·c++·笔记·学习
努力努力再努力wz14 分钟前
【Lua 入门系列】从执行模型到事件驱动:一文理解 Lua 有栈协程、挂起恢复与协作式调度
开发语言·lua
椒颜皮皮虾྅32 分钟前
一套 C# 接口,解锁四类视觉任务:DeploySharp 分类、分割、关键点与旋转框实战
开发语言·分类·c#
2603_965896621 小时前
JavaScript 原型与原型链
开发语言·前端·javascript
艾莉丝努力练剑1 小时前
【AI大模型接入SDK】ChatServer接口测试
网络·c++·人工智能·学习·ai·大模型·sdk
朋友圈自动点赞工具1 小时前
Ruby方法查找:对象不存方法
开发语言·前端·ruby·科技资讯
D e re k ZH1 小时前
C++ 模板与泛型编程进阶(No 2)
开发语言·c++