自动将强类型枚举转换为整数
在 C 中,枚举有两种风格:强类型枚举和常规枚举。常规枚举可以隐式转换为整数,而强类型枚举需要显式转换。这就提出了一个问题:是否有一种自动方法可以将强类型枚举转换为整数,而无需借助显式强制转换?
答案是否定的,而且这是有意为之。强类型枚举旨在防止隐式转换为整数。本质上,编译器确保您显式确认从枚举值到整数的转换。
但是,有一种解决方法可以避免在强制转换中指定基础类型。通过利用模板函数,我们可以抽象出强制转换的类型规范。
<code class="cpp">template <typename E> constexpr typename std::underlying_type<E>::type to_underlying(E e) noexcept { return static_cast<typename std::underlying_type<E>::type>(e); }</code>
使用此模板函数,可以实现如下转换:
<code class="cpp">std::cout << foo(to_underlying(b::B2)) << std::endl;</code>
这种方法消除了强制转换中的显式类型规范,简化了转换过程,同时保持了强类型枚举的强制显式转换所需的行为。
以上是C 中的强类型枚举可以自动转换为整数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!