提供されたコード内の変数 "i" などの静的データ メンバーは、初期化中に特別な処理を必要とします。値を割り当てるイニシャライザと、変数の存在を宣言する定義の違いを理解することが重要です。
コード例では、静的データメンバー "i" はクラス定義の外で初期化されます。定義では変数のメモリ内のアドレスを提供する必要があり、クラス定義自体では決定できないため、これが必須です。
一方、イニシャライザは、変数を指定せずに単に変数に値を代入します。住所。これにより、初期値を 1 か所で設定する簡潔な方法が可能になり、コンストラクター内で初期値を繰り返す必要がなくなります。
「normalValue」などの非静的データ メンバーこの例では、クラスのインスタンス内に存在します。それらのアドレスは、それらが属するインスタンスによって異なります。したがって、非静的データ メンバー定義は、インスタンスの作成時に作成されます。
対照的に、静的データ メンバーは固定アドレスを持ち、どのインスタンスからも独立して存在します。一意のアドレスを確実に取得するために、リンカーは静的データ メンバーごとに 1 つの定義を必要とします。通常、クラス定義は複数のオブジェクト ファイルに含まれるため、クラス内で静的データ メンバーを定義すると、この要件に違反します。
この問題を解決するには、静的データ メンバーの定義を次のようにする必要があります。クラス宣言の外に置かれます。これにより、それらが単一のオブジェクト ファイルに表示されるようになり、リンカが適切なアドレスを割り当てることができるようになります。
クラスの外で静的データ メンバーを定義する概念は、宣言することに似ています。外部変数。 extern 宣言は、変数がプログラム内の別の場所で定義されていることを示します。同様に、クラス定義内の静的データ メンバー宣言は、実際の定義が別途提供される extern 宣言として見ることができます。
以上がクラス定義の外で静的データ メンバーを初期化する方法と理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。