ホームページ  >  記事  >  バックエンド開発  >  C で静的データ メンバーにクラス外の初期化が必要なのはなぜですか?

C で静的データ メンバーにクラス外の初期化が必要なのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-04 19:23:01678ブラウズ

Why Do Static Data Members Require Out-of-Class Initialization in C  ?

静的データ メンバーの初期化について

静的データ メンバーをクラス外で初期化する理由

オブジェクト指向プログラミングでは、静的データ メンバークラスレベル変数として知られる変数は、クラスのすべてのインスタンス間で共有されます。各オブジェクト内に存在する通常のデータ メンバーとは異なり、静的データ メンバーはオブジェクト インスタンスの外部に存在します。

一意で一貫したアドレス割り当てを確保するには、静的データ メンバーはプログラム内で単一の明示的な定義を必要とします。クラス定義は通常複数のオブジェクト ファイルに含まれており、定義が重複する可能性があるため、この定義をクラス定義内に配置することはできません。したがって、静的データ メンバーの定義は個別に宣言する必要があります。

宣言と定義および NSDMI

非静的データ メンバーの初期化 (NSDMI) を使用すると、プログラマは非静的データ メンバーの初期値を指定できます。クラス定義内のデータ メンバー。ただし、これは単なる初期化であり、定義ではありません。データ メンバーの実際の定義は、静的であろうと非静的であろうと、クラスの外部で行われます。

メモリ割り当てとライフタイム

非静的データ メンバーは、それらが属するオブジェクト内に格納されます。 。それらのライフタイムは、オブジェクトのコンストラクターから始まります。一方、静的データ メンバーはオブジェクトから独立して存在し、プログラムの先頭から固定アドレスに常駐します。これらはコンパイル時にメモリが割り当てられます。

静的データ メンバーの定義: extern 変数との類似

静的データ メンバーの定義は、C での extern 変数の宣言に似ています。 extern int i; などの extern 変数宣言は、変数 i がプログラム内の別の場所で宣言されていることを示します。同様に、静的データ メンバーはクラス定義内で宣言されますが、その定義は int X::i = 0; のような構文を使用して個別に提供されます (X はクラス名、i は静的データ メンバーです)。

以上がC で静的データ メンバーにクラス外の初期化が必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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