Home >Backend Development >C++ >Do Static Variables in Member Functions Increment for All Instances or Only the Calling Instance?

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

Patricia Arquette
Patricia ArquetteOriginal
2024-11-08 09:41:01589browse

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

Static Variables in Member Functions: Understanding Instance-Specific vs. Global Declarations

In C , static variables within member functions present a unique situation where their behavior differs from their non-static counterparts. Let's explore how static variables work in member functions.

Consider the following class definition:

class A {
   void foo() {
      static int i; // Static variable declaration
      i++;
   }
};

If you declare multiple instances of class A, the question arises: Does calling foo() on any instance increment the static variable i for all instances or only for the instance on which foo() is called?

The answer lies in the nature of static variables. Unlike ordinary member variables, which are specific to each instance of a class, static variables are shared among all instances of that class. This means that there is only one instance of the static variable i across all instances of class A.

As a result, any instance of class A will affect the same i. The same i will remain throughout the program's lifetime. To illustrate this behavior:

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

In this example, there is only one i shared among all instances of class A, and calling foo() on any instance increments the same i. This shared behavior of static variables is important to keep in mind when designing classes and their member functions.

The above is the detailed content of Do Static Variables in Member Functions Increment for All Instances or Only the Calling Instance?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn