ホームページ > バックエンド開発 > C++ > C の Constexpr 関数を使用して静的 Constexpr メンバーを初期化できますか?

C の Constexpr 関数を使用して静的 Constexpr メンバーを初期化できますか?

Barbara Streisand
リリース: 2024-12-04 06:50:20
オリジナル
1068 人が閲覧しました

Can a Static Constexpr Member Be Initialized Using a Constexpr Function in C  ?

静的関数を使用して静的メンバーを初期化する Constexpr

元の質問:

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

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