如何自动将强类型枚举转换为 int?

发布于 2022-07-28 23:13:33

#include <iostream>

struct a {
  enum LOCAL_A { A1, A2 };
};
enum class b { B1, B2 };

int foo(int input) { return input; }

int main(void) {
  std::cout << foo(a::A1) << std::endl;
  std::cout << foo(static_cast<int>(b::B2)) << std::endl;
}

a::LOCAL_A是强类型枚举试图实现的,但有一个小的区别:普通枚举可以转换为整数类型,而强类型枚举在没有强制转换的情况下无法做到这一点。

那么,有没有一种方法可以将强类型枚举值转换为整数类型而无需强制转换?如果是,如何?

关注者
0
被浏览
15
1 个回答
  • 面试哥
    面试哥 2022-07-28
    为面试而生,有面试问题,就找面试哥。

    强类型枚举旨在解决多个问题,而不仅仅是您在问题中提到的范围问题:

    1. 提供类型安全,从而通过整数提升消除到整数的隐式转换。
    2. 指定基础类型。
    3. 提供强有力的范围界定。

    因此,不可能将强类型枚举隐式转换为整数,甚至是其底层类型——这就是想法。所以你必须使用static_cast明确的转换。

    如果您唯一的问题是作用域,并且您确实希望对整数进行隐式提升,那么您最好使用具有声明它的结构范围的非强类型枚举。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看