次のクラスを考えてみましょう。
class A { void foo() { static int i; i++; } };
C のメンバー関数内で静的変数を扱う場合、次のようになります。インスタンス間でインスタンスがどのように動作するかを理解することが重要です。
複数のインスタンスと静的変数
各インスタンスが静的変数の独自のコピーを所有するという想定に反して、この特定のシナリオでは、プログラム全体内に static int i のコピーが 1 つだけ存在します。これは、クラス A が非テンプレート クラスであり、A::foo() が非テンプレート関数であるためです。
静的変数に対するインスタンスの影響
関係なくA のどのインスタンスが foo() メソッドを呼び出すかによって、共有静的変数 i が影響を受けます。たとえば、次のように A の複数のインスタンスを宣言した場合:
A o1, o2, o3;
これらのインスタンスのいずれかで foo() を呼び出すと、変数 i がインクリメントされます:
o1.foo(); // i = 1 o2.foo(); // i = 2 o3.foo(); // i = 3 o1.foo(); // i = 4
結論としては、staticメンバー関数の変数はクラスのすべてのインスタンス間で共有されるため、どのインスタンスでも同じ値にアクセスして変更できます。
以上がメンバー関数の静的変数は、クラスの異なるインスタンス間でどのように動作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。