#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
是强类型枚举试图实现的,但有一个小的区别:普通枚举可以转换为整数类型,而强类型枚举在没有强制转换的情况下无法做到。
那么,有没有一种方法可以将强类型枚举值转换为整数类型而无需强制转换?如果是,如何?
原文由 BЈовић 发布,翻译遵循 CC BY-SA 4.0 许可协议
强类型枚举旨在解决多个问题,而不仅仅是您在问题中提到的范围问题:
因此,不可能将强类型枚举隐式转换为整数,甚至是其底层类型——这就是想法。所以你必须使用
static_cast
来明确转换。如果您唯一的问题是作用域,并且您确实希望对整数进行隐式提升,那么您最好使用非强类型枚举及其声明的结构范围。