ホームページ > バックエンド開発 > C++ > コンパイル時に C11 式が `constexpr` であるかどうかをどのように判断できるでしょうか?

コンパイル時に C11 式が `constexpr` であるかどうかをどのように判断できるでしょうか?

Linda Hamilton
リリース: 2024-12-03 17:42:13
オリジナル
837 人が閲覧しました

How Can We Determine if a C  11 Expression is a `constexpr` at Compile Time?

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

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