目的は、constexpr から計算されたコンパイル時定数 (constexpr 値) を取得することです。関数、両方とも同じクラス名前空間内にあります。
class C1 { constexpr static int foo(int x) { return x + 1; } constexpr static int bar = foo(sizeof(int)); };
ただし、初期化子での非定数式の使用を理由に、これは g -4.5.3 と g -4.6.3 の両方で失敗します。
class C2 { constexpr static int foo(int x) { return x + 1; } constexpr static int bar; }; constexpr int C2::bar = C2::foo(sizeof(int));
これは g -4.5.3 でコンパイルされますが、g -4.6.3 では次のようになります。
C 標準 (セクション 9.4.2) によれば、constexpr 静的データ メンバーは、クラス定義。すべての初期化句は定数式である必要があります。
"2 番目
最初の想定に反して、両方の試行は失敗したことがわかります。標準では、クラスが完全なコンテキストで静的 constexpr データ メンバーを初期化することは禁止されています。
以上がC で静的 constexpr 関数を使用して静的 constexpr メンバーを初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。