ホームページ > バックエンド開発 > C++ > C で排他的な Constexpr if-else パスを保証するにはどうすればよいですか?

C で排他的な Constexpr if-else パスを保証するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-27 17:15:13
オリジナル
290 人が閲覧しました

How Can I Guarantee Exclusive Constexpr if-else Paths in C  ?

排他的な Constexpr if-else パスの確保

constexpr if-else 節では、else ケースが決して取られないようにすることが重要です。伝統的に、static_assert(false); を使用することがあります。このような場合にエラーを発生させるため。ただし、このアプローチでは、ステートメントを予期せず true としてアサートするコンパイル エラーが発生します。

代わりに、else ケースが到達不能であることを強制するには、破棄されるステートメントをテンプレート パラメーターに依存させる必要があります。これは、テンプレート引数に関係なく std::false_type を返す always_false テンプレートを使用して実現できます。

template <class... T> constexpr std::false_type always_false{};

if constexpr (condition1) {
    // ...
} else if constexpr (condition2) {
    // ...
} else if constexpr (condition3) {
    // ...
} else {
    static_assert(always_false<T...>);
}
ログイン後にコピー

この解決策は、C では、プログラムが不正な形式であるとみなされるという事実に基づいています。有効な特殊化は、テンプレートまたは constexpr if-else サブステートメントに対して生成できます。したがって、else 句が到達不能になると、コンパイラはコンパイル エラーを発行し、コードが有効なままであることを確認します。

以上がC で排他的な Constexpr if-else パスを保証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート