C++:enum与enum class的区别

在编程中,enum 和 enum class是用来定义枚举类型的关键字,它们在不同编程语言中表现也有所不同。以 C++ 为例,enumenum class 分别代表传统的枚举类型和强类型枚举。这里简要解释一下它们在 C++ 中的区别:

  1. 作用域 (Scoping):

    • enum 的枚举值没有自己的作用域,枚举值直接位于包含它们的作用域中。
    • enum class 的枚举值被限定在枚举类的作用域内。要访问枚举值,需要通过枚举类型名进行限定,如 EnumClass::Value
  2. 类型安全 (Type safety):

    • enum 类型不是类型安全的。枚举值可以与整数直接互换,这可能会导致类型方面的错误。
    • enum class 提供了更强的类型安全。它不会隐式转换为整数类型,减少了潜在的错误。
  3. 隐式转换 (Implicit Conversion):

    • enum 的枚举值可以隐式转换为它们的底层类型(通常是整型)。
    • enum class 的枚举值不会隐式转换为其它类型。如果你想要转换,必须进行显式转换。
  4. 底层类型 (Underlying type):

    • enum 的底层类型可以是整型,但不能指定类型,默认是 int
    • enum class 允许显式指定底层类型,如:enum class EnumClass : unsigned int {Value1, Value2};

以下是它们在 C++ 中的使用示例:

// Old enum style
enum OldEnum { Value1, Value2 };
int val = Value1; // Allowed

// New scoped and strongly-typed enum
enum class NewEnum { Value1, Value2 };
NewEnum val = NewEnum::Value1; // Must use EnumClass::Value
// int number = NewEnum::Value1; // Error: no implicit conversion
int number = static_cast<int>(NewEnum::Value1); // Explicit conversion is ok

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值