元の質問:
C の場合constexpr 値を計算することは可能ですか? (コンパイル時定数) を constexpr 関数から取得し、クラスの静的メンバーとして保存しますか?
最初の試行とコンパイラの応答:
最初の試行クラス内で静的 constexpr 関数 foo を定義し、foo を使用して静的 constexpr メンバー bar を初期化します。両方の g でエラーが発生して失敗しました。 -4.5.3 および g -4.6.3.
説明:
C 標準に従って、静的 constexpr データ メンバーはクラス定義で次を使用して初期化できます。 brace-or-equal-initializer。各初期化句は定数式である必要があります。 bar の初期化がクラス本体内の const 式 foo(sizeof(int)) に依存しており、定数式ではないため、提供されたコードはこのルールに違反していました。
さらなる分析:
constexpr 関数定義をクラス本体の外に移動するなどのさらなる試みでは、依然として g -4.6.3 でエラーが発生しました。コンパイラ固有の制限を強調しています。
結論:
C 標準によれば、constexpr 関数呼び出しを伴う初期化子を使用して静的 constexpr データ メンバーを初期化することは外部では許可されません。 constexpr 関数または constexpr コンストラクターの定義。これは、constexpr 変数がメンバー関数本体内でコンパイル時の定数として使用可能である必要があるという要件によるものです。
以上がC の Constexpr 関数を使用して静的 Constexpr メンバーを初期化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。