静的データ メンバーの初期化がクラス定義の外部で行われる必要があるのはなぜですか?

Barbara Streisand
リリース: 2024-11-05 06:59:01
オリジナル
121 人が閲覧しました

Why Must Static Data Member Initialization Occur Outside the Class Definition?

静的データ メンバーの初期化: 詳細

オブジェクト指向プログラミングの世界では、静的データ メンバーは、次の理由により特別な位置を占めています。プログラムの複雑さ。基本的な疑問が生じます: なぜ静的データ メンバーの初期化がクラス定義の外部で行われなければならないのですか?

問題の核心は、変数の初期化と定義の違いにあります。静的変数は、非静的変数とは異なり、オブジェクト インスタンスから独立して存在します。プログラム全体を通じて一定に保たれる、メモリ内の一意のアドレスが必要です。

クラス定義内で静的データ メンバーを初期化する場合、次のようになります。

class X
{
public:
      int normalValue = 5; //NSDMI
      static int i;
};
ログイン後にコピー

これは初期化子とみなされ、次のことを示します。初期値はありますが、変数は定義されていません。定義では、変数が常駐するメモリ内の固定アドレスを指定します。クラス外で明示的に定義しないと、コンパイラは一意のアドレスを割り当てて静的変数にメモリを割り当てることができません。

したがって、次のコード変更は有効です。

class X
{
public:
  int normalValue = 5;
  static const int i = 0;       // declaration, with initializer
};

const int X::i;                 // definition
ログイン後にコピー

Inこの変更されたコードでは、変数「i」はクラス内で宣言および初期化されますが、定義はクラスの外で提供されます。宣言内の "const" キーワードにより、初期値の変更が防止されます。

本質的に、非静的変数は特定のオブジェクト インスタンスに属しますが、静的変数は独立して存在します。一意のアドレスと外部定義が必要なため、静的変数の整合性とプログラム全体でのアクセス可能性が確保されます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!