[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。

相关推荐
Mr.朱鹏几秒前
JVM-GC垃圾回收案例
java·jvm·spring boot·算法·spring·spring cloud·java-ee
WJSKad123525 分钟前
【DepthPro】实战教程:单目深度估计算法详解与应用
算法
wzqllwy28 分钟前
8 大经典排序算法(Java 实现):原理 + Demo + 核心分析
java·算法·排序算法
We་ct29 分钟前
LeetCode 77. 组合:DFS回溯+剪枝,高效求解组合问题
开发语言·前端·算法·leetcode·typescript·深度优先·剪枝
格林威30 分钟前
工业相机图像高速存储(C#版):内存映射文件方法,附Basler相机C#实战代码!
开发语言·人工智能·数码相机·c#·机器视觉·工业相机·堡盟相机
Nuopiane31 分钟前
MyPal3(3)
java·开发语言
重生之我是Java开发战士32 分钟前
【递归、搜索与回溯】二叉树中的深度优先搜索:布尔二叉树,求根节点到叶节点数字之和,二叉树剪枝,验证二叉搜索树,第K小的元素,二叉树的所有路径
算法·深度优先·剪枝
篮l球场32 分钟前
矩阵置零
算法
mjhcsp34 分钟前
C++剪枝解析
c++·剪枝
wregjru34 分钟前
【网络】5.HTTP 协议详解与实现
c++