C 11 での constexpr の使用: 定数式の決定
質問:
それは可能ですかC 11 式が以下に該当するかどうかを確認するためコンパイル時に宣言に依存せずに定数式 (constexpr) を使用するには?
答え:
noexc 演算子を使用すると、コンパイル時にブール値を構築できます。式が構成されているかどうかを示します。 constexpr:
template<typename T> constexpr typename remove_reference<T>::type makeprval(T&& t) { return t; } #define isprvalconstexpr(e) noexcept(makeprval(e))
説明:
noExcept(e) 式は次の条件を検証します:
制限事項:
保守的な性質のため「評価される可能性がある」式では、noExcept が偽陰性を引き起こす可能性がある場合があります。例:
constexpr int a = (0 ? throw "fooled!" : 42); constexpr bool atest = isprvalconstexpr((0 ? throw "fooled!" : 42)); // returns false
この場合、 a は正常に初期化されますが、 throw 式は実行されなくても潜在的に評価されるため、 atest は false と評価されます。
以上が宣言なしでコンパイル時に C 11 式が `constexpr` であるかどうかを判断できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。