「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C++ の Constexpr 関数を使用して静的 Constexpr メンバーを初期化できますか?

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

2024 年 12 月 22 日に公開
ブラウズ:554

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

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

元の質問:

C では、 constexpr 関数から constexpr 値 (コンパイル時定数) を計算し、それを静的メンバーとして保存することは可能ですか? class?

最初の試行とコンパイラの応答:

クラス内で静的 constexpr 関数 foo を定義し、foo を使用して静的 constexpr メンバー bar を初期化する最初の試行が失敗しましたg -4.5.3 と g の両方にエラーがあります-4.6.3.

説明:

C 標準に従って、静的 constexpr データ メンバーは、中括弧または等号を使用してクラス定義で初期化できます。 -initializer。各初期化子句は定数式である必要があります。 bar の初期化がクラス本体内の const 式 foo(sizeof(int)) に依存しており、定数式ではないため、提供されたコードはこのルールに違反しています。

さらなる分析:

constexpr 関数定義をクラス本体の外に移動するなどのさらなる試みでも、依然として g -4.6.3 でエラーが発生し、コンパイラ固有の点が強調されました。制限事項。

結論:

C 標準によれば、constexpr 関数呼び出しを伴う初期化子を使用して静的 constexpr データ メンバーを初期化することは、関数の定義外では許可されません。 constexpr 関数または constexpr コンストラクター。これは、constexpr 変数がメンバー関数本体内でコンパイル時の定数として使用可能である必要があるという要件によるものです。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3