ホームページ >バックエンド開発 >C++ >クラス定義の外で静的データ メンバーを初期化する方法と理由

クラス定義の外で静的データ メンバーを初期化する方法と理由

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

How and Why Do We Initialize Static Data Members Outside the Class Definition?

静的データ メンバーの初期化と定義

提供されたコード内の変数 "i" などの静的データ メンバーは、初期化中に特別な処理を必要とします。値を割り当てるイニシャライザと、変数の存在を宣言する定義の違いを理解することが重要です。

イニシャライザと定義

コード例では、静的データメンバー "i" はクラス定義の外で初期化されます。定義では変数のメモリ内のアドレスを提供する必要があり、クラス定義自体では決定できないため、これが必須です。

一方、イニシャライザは、変数を指定せずに単に変数に値を代入します。住所。これにより、初期値を 1 か所で設定する簡潔な方法が可能になり、コンストラクター内で初期値を繰り返す必要がなくなります。

非静的データ メンバー

「normalValue」などの非静的データ メンバーこの例では、クラスのインスタンス内に存在します。それらのアドレスは、それらが属するインスタンスによって異なります。したがって、非静的データ メンバー定義は、インスタンスの作成時に作成されます。

静的データ メンバーの定義

対照的に、静的データ メンバーは固定アドレスを持ち、どのインスタンスからも独立して存在します。一意のアドレスを確実に取得するために、リンカーは静的データ メンバーごとに 1 つの定義を必要とします。通常、クラス定義は複数のオブジェクト ファイルに含まれるため、クラス内で静的データ メンバーを定義すると、この要件に違反します。

クラス外の定義

この問題を解決するには、静的データ メンバーの定義を次のようにする必要があります。クラス宣言の外に置かれます。これにより、それらが単一のオブジェクト ファイルに表示されるようになり、リンカが適切なアドレスを割り当てることができるようになります。

外部変数との類似

クラスの外で静的データ メンバーを定義する概念は、宣言することに似ています。外部変数。 extern 宣言は、変数がプログラム内の別の場所で定義されていることを示します。同様に、クラス定義内の静的データ メンバー宣言は、実際の定義が別途提供される extern 宣言として見ることができます。

以上がクラス定義の外で静的データ メンバーを初期化する方法と理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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