C 11 の Constexpr 式の決定
質問: C 11 の式が定数式 (constexpr)コンパイル時?
答え: はい、次の手法を使用すると可能です:
template<typename T> constexpr typename remove_reference<T>::type makeprval(T&& t) { return t; } #define isprvalconstexpr(e) noexcept(makeprval(e))
説明:
isprvalconstexpr マクロは式 e を受け取り、e が prvalue 定数式である場合 (つまり、コンパイル時に評価できます)。これは、 noexc 演算子を使用することによって決定されます。 e に、非スロー例外仕様、スロー式、またはスロー可能な動的キャストまたは typeid を持たない、潜在的に評価される関数呼び出しが含まれている場合に false を返します。
制限事項:
この手法には制限があることに注意することが重要です。 noexc 演算子は、偽陰性を与える場合があります。つまり、式が定数式であるにもかかわらず、定数式ではないと報告する可能性があります。これは、e 内の「評価される可能性がある」式が実際には評価されない場合に発生します。これは、形式的には評価される可能性があるとみなされていても、特定の状況で発生する可能性があります。
以上がコンパイル時に C11 式が `constexpr` であるかどうかをどのように判断できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。