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

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

Linda Hamilton
リリース: 2024-11-27 11:01:10
オリジナル
549 人が閲覧しました

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

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