直接看如下代码:
#include <iostream>
struct a {
enum LOCAL_A { A1, A2 };
};
enum class b { B1, B2 };
int foo(int input) { return input; }
int main() {
std::cout << foo(a::A1) << std::endl;
std::cout << foo(static_cast<int>(b::B2)) << std::endl;
return 0;
}
a::LOCAL_A
是强类型枚举试图实现的功能,但是有一个小的区别:普通枚举可以转换为整数类型,而强类型枚举不能在没有强制转换的情况下实现。
因此,有没有办法将强类型的枚举值转换为整数类型而无需强制转换?如果是,怎么办?
强类型枚举,旨在解决多个问题,而不仅仅是您在问题中提到的范围界定问题:
提供类型安全性,从而消除了通过整数提升而隐式转换为整数的情况。 指定基础类型。 提供强大的作用域。
因此,不可能将强类型的枚举隐式转换为整数,甚至是其基础类型-这就是这个想法。因此,您必须使用static_cast
明确显示转换。
如果唯一的问题是作用域确定,并且您确实希望隐式提升为整数,那么最好在声明它的结构范围内使用不强类型的枚举。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有