メンバー関数の静的変数: インスタンス固有宣言とグローバル宣言を理解する
C では、メンバー関数内の静的変数は独特の状況を示します。ここで、それらの動作は静的でない対応物とは異なります。静的変数がメンバー関数でどのように機能するかを調べてみましょう。
次のクラス定義を考えてみましょう。
class A { void foo() { static int i; // Static variable declaration i++; } };
クラス A の複数のインスタンスを宣言すると、次のような疑問が生じます。 foo() を呼び出すのは次のとおりです。インスタンスは静的変数 i をすべてのインスタンスに対してインクリメントしますか、それとも foo() が呼び出されるインスタンスに対してのみインクリメントしますか?
答えは次のとおりです。静的変数の性質。クラスの各インスタンスに固有の通常のメンバー変数とは異なり、静的変数はそのクラスのすべてのインスタンス間で共有されます。これは、クラス A のすべてのインスタンスにわたって、静的変数 i のインスタンスが 1 つだけ存在することを意味します。
結果として、クラス A のどのインスタンスも同じ i に影響を与えます。同じ i はプログラムの存続期間中残ります。この動作を説明すると、
A o1, o2, o3; o1.foo(); // Increment i to 1 o2.foo(); // Increment i to 2 o3.foo(); // Increment i to 3 o1.foo(); // Increment i to 4
この例では、クラス A のすべてのインスタンス間で共有される i は 1 つだけであり、どのインスタンスでも foo() を呼び出すと同じ i がインクリメントされます。静的変数のこの共有動作は、クラスとそのメンバー関数を設計するときに念頭に置くことが重要です。
以上がメンバー関数の静的変数はすべてのインスタンスでインクリメントされますか、それとも呼び出し側のインスタンスのみでインクリメントされますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。