C 11 での constexpr 式の検出
C 11 では、式が定数式 (constexpr) として適格であるかどうかを判断することが重要です。コンパイル時に。この知識はさまざまな最適化手法に役立ち、コンパイル時の計算値の生成を可能にします。
is_constexpr の実現可能性
コンパイル時の計算値の生成の実現可能性について懸念が生じます。 C 11 式の constexpr の性質に基づくブール値。以前の Stack Overflow の質問でもこのトピックに触れていますが、決定的な答えはまだ見つかりません。
解決策: noexc トリック
解決策には、次の値を評価する noexc 式を利用することが含まれます。指定された式に constexpr の要件に違反する特定の要素が含まれている場合は false に設定されます。これらの要素には次のものが含まれます。
意図的に関数を作成するテンプレート non-noexc を式に適用すると、noExcept(e) 式を利用して検出できます。 constexpr 式。このアプローチでは、特に prvalue 定数式を特定します。
制限
このメソッドに関連する制限に注意することが重要です。
実装例
次のコード スニペットは、提案されたコードを示しています。解決策:
template<typename T> constexpr typename remove_reference<T>::type makeprval(T && t) { return t; } #define isprvalconstexpr(e) noexcept(makeprval(e))
制限にもかかわらず、このアプローチは C 11 式の constexpr の性質についての貴重な洞察を提供し、プログラマに優れた制御機能と最適化機能を提供します。
以上がC 11 の `noexc` トリックは確実に `constexpr` 式を検出できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。