静的関数を使用した静的メンバー Constexpr の初期化
問題:
静的関数を含む constexpr メンバー。コンパイル時に計算された値で初期化されます。 時間。ただし、GCC でこれを実行しようとするとコンパイル エラーが発生します。
初期試行:
最初の試行では、静的 constexpr メンバーと関数をクラス定義内に配置し、トリガーを実行しました。古いバージョンの GCC ではコンパイル エラーが発生します。 2 回目の試行では、これらの要素をクラス本体の外に移動しましたが、後のバージョンでも問題が発生しました。
説明:
C 標準では、constexpr static の特定の要件が規定されています。データメンバー。これらのメンバーは、brace-or-equal-initializer を使用して初期化する必要があります。この場合、すべての代入は定数式になります。 「2 回目の試行」では、この形式に従っていませんでした。
解決策:
残念ながら、現時点では、静的関数を使用して constexpr 静的データ メンバーを初期化することはできません。 C規格に従って可能です。これは、constexpr 変数がメンバー関数本体内からコンパイル時の定数として使用できる必要があるためです。ただし、静的関数はクラスが完了するまで未定義であるため、式を定数式にすることはできません。
GCC で確認された問題:
最初の試行有効であるはずですが、以前のバージョンの GCC ではバグが発生した可能性があります。 GCC のより新しいバージョンにアクセスできる場合は、最初のコードをもう一度試してみる価値があります。
以上がC で静的関数を使用して静的 Constexpr メンバーを初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。