オブジェクト指向プログラミングでは、静的データ メンバークラスレベル変数として知られる変数は、クラスのすべてのインスタンス間で共有されます。各オブジェクト内に存在する通常のデータ メンバーとは異なり、静的データ メンバーはオブジェクト インスタンスの外部に存在します。
一意で一貫したアドレス割り当てを確保するには、静的データ メンバーはプログラム内で単一の明示的な定義を必要とします。クラス定義は通常複数のオブジェクト ファイルに含まれており、定義が重複する可能性があるため、この定義をクラス定義内に配置することはできません。したがって、静的データ メンバーの定義は個別に宣言する必要があります。
非静的データ メンバーの初期化 (NSDMI) を使用すると、プログラマは非静的データ メンバーの初期値を指定できます。クラス定義内のデータ メンバー。ただし、これは単なる初期化であり、定義ではありません。データ メンバーの実際の定義は、静的であろうと非静的であろうと、クラスの外部で行われます。
非静的データ メンバーは、それらが属するオブジェクト内に格納されます。 。それらのライフタイムは、オブジェクトのコンストラクターから始まります。一方、静的データ メンバーはオブジェクトから独立して存在し、プログラムの先頭から固定アドレスに常駐します。これらはコンパイル時にメモリが割り当てられます。
静的データ メンバーの定義は、C での extern 変数の宣言に似ています。 extern int i; などの extern 変数宣言は、変数 i がプログラム内の別の場所で宣言されていることを示します。同様に、静的データ メンバーはクラス定義内で宣言されますが、その定義は int X::i = 0; のような構文を使用して個別に提供されます (X はクラス名、i は静的データ メンバーです)。
以上がC で静的データ メンバーにクラス外の初期化が必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。