C++ enum 和enum class

文章讲述了C++中的enum和enumclass两种枚举类型的定义、作用域、类型转换以及它们之间的区别。enum默认基于int类型,命名值有全局作用域,而enumclass提供更强的类型安全,命名值局限于枚举自身的作用域,需要显式转换。
摘要由CSDN通过智能技术生成

C++ enum 和 enum class

在C++中, enum 是一种定义枚举类型的方法。 一个枚举是一个整数值的命名集合。 可以通过以下方式创建一个枚举类型:

enum Color {
    RED,
    GREEN,
    BLUE
};

这里我们定义了一个名为 Color 的枚举类型,并包括三个命名值: REDGREENBLUE 。 在默认情况下,第一个名称的值是0,后续名称的值将递增。

我们可以使用此枚举类型来定义变量:

Color myColor = RED;

我们也可以直接访问枚举中的某个值(注意:这不是枚举的类型):

int value = GREEN;

enum 中,虽然命名值在同一个命名空间(namespace)中,但它们的作用域是全局的。

另一方面,enum class 是C++11引入的新特性。与传统的枚举类型相比,enum class 具有更严格的类型检查和更高的安全性。 在 enum class 中,命名值不再具有全局作用域。 这是 enumenum class 的一个主要区别。

我们可以使用以下方式创建一个 enum class

enum class Color2 {
    RED,
    GREEN,
    BLUE
};

这里我们定义了一个名为 Color2enum class,并包括三个命名值: RED, GREEN, 和 BLUE 。 请注意,在 enum class 中,命名值是在类型范围内定义的。 因此,我们将命名值作为 Color2::RED 等限定符使用。

我们可以使用下面的语句定义变量:

Color2 myColor2 = Color2::RED;

我们也可以直接访问枚举中的某个值:

int value = static_cast<int>(Color2::GREEN);

enum class 中,命名值的作用域仅限于该 enum class。 这意味着我们不能在不使用限定符的情况下直接引用命名值。

共同点

  • enumenum class 都是定义枚举类型的方法。

区别

  • 在默认情况下,enum 是基于int类型的;而 enum class 明确指定了底层类型(默认为int)。
  • enum 中,命名值在全局范围内具有作用域。 但在 enum class 中,命名值的作用域限制在 enum class 内部。
  • enum 命名值之间可以进行赋值、比较等操作,而在 enum class 中,只有类型相同的枚举值才能进行此类操作。
  • enum 与普通的整型值之间可以交换转换,但是很容易出现类型不匹配等问题。 而在将 enum class 值与整数值进行比较之前,需要先进行强制类型转换。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值