ホームページ >バックエンド開発 >C++ >メンバー関数の静的変数はクラスのすべてのインスタンスで共有されますか?

メンバー関数の静的変数はクラスのすべてのインスタンスで共有されますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-23 09:07:31280ブラウズ

Are static variables in member functions shared across all instances of a class?

メンバー関数の静的変数: 動作を理解する

C では、メンバー関数内の静的変数はインスタンス変数とは異なる動作をします。例を使用して、それらがどのように機能するかを調べてみましょう。

次のクラスについて考えてみましょう。

class A {
   void foo() {
      static int i;
      i++;
   }
};

このクラスでは、i は foo メンバー関数内の静的変数として宣言されています。静的変数には、プログラム全体を通じて存続する存続期間があります。

次に、クラス A の複数のインスタンスが作成されたときに何が起こるかを考えてみましょう。

A o1, o2, o3;

静的変数はすべてのインスタンスで共有されていますか? A のインスタンスですか、それとも各インスタンスには独自のコピーがありますか?

C では、メンバー関数内の静的変数は、A のすべてのインスタンス間で共有されます。 クラス。これは、A の 1 つのインスタンスで foo() を呼び出すと、すべてのインスタンスで同じ i がインクリメントされることを意味します。

この動作を説明するには、次のようにします。

o1.foo(); // i = 1
o2.foo(); // i = 2
o3.foo(); // i = 3

この例では、A の各インスタンスは、 foo() 関数は、共有静的変数 i をインクリメントします。

したがって、各インスタンスに固有のインスタンス変数とは異なり、メンバー内の静的変数は関数は、クラスのすべてのインスタンスによって共有される単一のエンティティです。プログラムの存続期間中、その値は維持されます。

以上がメンバー関数の静的変数はクラスのすべてのインスタンスで共有されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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