首页 >后端开发 >C++ >如何在 C 中将强类型枚举隐式转换为整数?

如何在 C 中将强类型枚举隐式转换为整数?

Susan Sarandon
Susan Sarandon原创
2024-11-04 12:28:01699浏览

How to Implicitly Convert Strongly Typed Enums to Ints in C  ?

强类型枚举到 Int 的隐式转换

C 11 中引入的强类型枚举旨在防止隐式转换为整数。但是,在某些情况下,您可能希望将强类型枚举值转换为 int,而不需要显式强制转换。

为了解决此问题,建议了几种方法:

  1. 使用函数:

您可以定义一个执行转换的函数。例如:

<code class="cpp">#include <iostream>

struct a {
  enum LOCAL_A { A1, A2 };
};

template <typename E>
int to_int(E e) {
  return static_cast<int>(e);
}

int main() {
  // Use the to_int function to convert the strongly typed enum value b::B2 to int
  std::cout << to_int(b::B2) << std::endl;
}</code>
  1. 使用带有模板参数推导的函数:

为了简化语法,您可以使用以下函数模板:自动推导枚举类型:

<code class="cpp">#include <iostream>

struct a {
  enum LOCAL_A { A1, A2 };
};

template <typename E>
constexpr typename std::underlying_type<E>::type get_underlying(E e) noexcept {
  return static_cast<typename std::underlying_type<E>::type>(e);
}

int main() {
  // Use the get_underlying function to convert the strongly typed enum value b::B2 to int
  std::cout << get_underlying(b::B2) << std::endl;
}</code>
  1. 创建宏:

您还可以使用宏使转换过程更加简洁:

<code class="cpp">#include <iostream>

struct a {
  enum LOCAL_A { A1, A2 };
};

#define TO_INT(e) static_cast<int>(e)

int main() {
  // Use the TO_INT macro to convert the strongly typed enum value b::B2 to int
  std::cout << TO_INT(b::B2) << std::endl;
}</code>

虽然可以在不进行显式强制转换的情况下将强类型枚举转换为整数,但请务必注意,这可能会导致意外行为。建议在适当的时候使用显式强制转换,以避免潜在的问题。

以上是如何在 C 中将强类型枚举隐式转换为整数?的详细内容。更多信息请关注PHP中文网其他相关文章!

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