ホームページ  >  記事  >  バックエンド開発  >  C では、厳密に型指定された列挙型を自動的に整数に変換できますか?

C では、厳密に型指定された列挙型を自動的に整数に変換できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-03 22:30:03832ブラウズ

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

厳密に型指定された列挙型から整数への変換を自動化する

C では、列挙型には、厳密に型指定された列挙型と通常の列挙型の 2 種類があります。通常の列挙型は暗黙的に整数に変換できますが、厳密に型指定された列挙型は明示的なキャストが必要です。ここで疑問が生じます: 明示的なキャストに頼らずに、厳密に型指定された列挙型を整数に自動変換する方法はありますか?

答えはノーであり、これは意図的なものです。厳密に型指定された列挙型は、暗黙的な整数への変換を防ぐように設計されています。基本的に、コンパイラは列挙値から整数への変換を明示的に確認するようにします。

ただし、キャストで基になる型を指定しないようにする回避策があります。テンプレート関数を利用することで、キャストの型指定を抽象化できます。

<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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。