ホームページ >バックエンド開発 >C++ >C で静的 constexpr 関数を使用して静的 constexpr メンバーを初期化するにはどうすればよいですか?

C で静的 constexpr 関数を使用して静的 constexpr メンバーを初期化するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-30 07:02:17990ブラウズ

How Can I Initialize a Static constexpr Member Using a Static constexpr Function in C  ?

constexpr 静的関数を使用した静的メンバーの初期化

問題

目的は、constexpr から計算されたコンパイル時定数 (constexpr 値) を取得することです。関数、両方とも同じクラス名前空間内にあります。

最初Attempt

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 の両方で失敗します。

2 回目の試行

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。