C での静的メンバー変数の初期化
C では、静的メンバー変数はクラス定義の外で初期化されます。この設計上の選択により、その論理的推論と潜在的なレガシーへの影響に関して疑問が生じています。
外部初期化の理由
静的メンバーは、遵守するために 1 つの変換単位内で定義する必要があります。 1 つの定義ルール。クラス内で初期化が許可されている場合、ヘッダー ファイルが含まれる異なる翻訳単位で複数の定義が発生する可能性があります。
例
次のコード スニペットを考えてみましょう。
struct Gizmo { static string name = "Foo"; };
名前がクラス内で初期化される場合、その名前はヘッダー ファイルを含む各翻訳単位で定義されます。これは、単一定義ルールに違反します。
Integral static Members
C では、宣言内で整数静的メンバーの初期化が可能です。ただし、1 定義ルールを満たすには、単一の翻訳単位内に外部定義が必要です。これは構文上のショートカットとして機能します。
struct Gizmo { static const int count = 42; };
初期化で使用される式が const 整数型または列挙型である限り、コンパイル時に評価でき、定義が単一の翻訳単位に存在する限り、このアプローチは有効です。例:
gizmo.cpp
#include "gizmo.h" const int Gizmo::count;
以上がC の静的メンバー変数がクラス定義の外で初期化されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。