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))
このマクロは、noexc 演算子を利用して、式 e が prvalue 定数式であるかどうかをチェックします。 noexc(makeprval(e)) が true と評価される場合、式 e は prvalue 定数式です。
説明:
Prvalue 定数式には特定の制限があります:
makeprval 関数は宣言されていませんしたがって、e が prvalue 定数式の場合、makeprval(e) の呼び出しは定数式になります。したがって、noExcept 演算子は true を返します。
制限:
isprvalconstexpr マクロにはいくつかの制限があります:
以上がC 11 は式がコンパイル時定数であるかどうかを判断できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。