ホームページ > バックエンド開発 > C++ > メンバー関数の静的変数はすべてのインスタンスでインクリメントされますか、それとも呼び出し側のインスタンスのみでインクリメントされますか?

メンバー関数の静的変数はすべてのインスタンスでインクリメントされますか、それとも呼び出し側のインスタンスのみでインクリメントされますか?

Patricia Arquette
リリース: 2024-11-08 09:41:01
オリジナル
587 人が閲覧しました

Do Static Variables in Member Functions Increment for All Instances or Only the Calling Instance?

メンバー関数の静的変数: インスタンス固有宣言とグローバル宣言を理解する

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート