ホームページ >バックエンド開発 >C++ >C Constexpr if-else ステートメントで未処理のケースのコンパイル時エラーを保証するにはどうすればよいですか?

C Constexpr if-else ステートメントで未処理のケースのコンパイル時エラーを保証するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-27 11:01:10562ブラウズ

How to Guarantee Compile-Time Errors for Unhandled Cases in C   Constexpr if-else Statements?

Constexpr if-else 節の不出現のアサート

C では、すべての constexpr if ステートメントに少なくとも一つの本当の枝。どの条件も満たされない場合、予期しない動作を防ぐためにコンパイル時エラーが発生することが望まれます。

よくある誤解の 1 つは、else 句内で static_assert(false) を使用することです。ただし、このアプローチはコンパイラでは受け入れられません。

この問題に対処する解決策は、破棄されるステートメントをテンプレート パラメーターに依存させることです。 constexpr std::false_type クラスを導入し、テンプレート パラメーター T で特殊化することにより、常に false と評価される条件を作成できます。

例を次に示します。

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

if constexpr (condition1) {
    ...
} else if constexpr (condition2) {
    ...
} else if constexpr (condition3) {
    ...
} else {
    // Always false condition
    static_assert(always_false<T>);
}

によるとC 標準のセクション [temp.res]/8 (テンプレートまたは constexpr if ステートメントのサブステートメントに対して有効な特殊化を生成できない場合)テンプレートである場合、プログラムは不正な形式であるとみなされます。これにより、else 句が決して使用されず、コンパイル時エラーが発生することが効果的に保証されます。

以上がC Constexpr if-else ステートメントで未処理のケースのコンパイル時エラーを保証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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