首页 >后端开发 >C++ >C 中的强类型枚举可以自动转换为整数吗?

C 中的强类型枚举可以自动转换为整数吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-03 22:30:03914浏览

Can Strongly Typed Enums Be Automatically Converted to Integers in C  ?

自动将强类型枚举转换为整数

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn