A variable declared static in a function retains its state between calls to that function.
When modifying a data member in a class declaration, the static keyword specifies that one copy of the member is shared by all instances of the class. When modifying a member function in a class declaration, the static keyword specifies that the function accesses only static members.
Static data members of classes must be initialized at file scope.
In recursive code, a static object or variable is guaranteed to have the same state in different instances of a block of code.
The members of a union cannot be declared as static. An anonymous union declared globally must be explicitly declared static.
Objects and variables defined outside all blocks have static lifetime and external linkage by default. A global object or variable that is explicitly declared as static has internal linkage.
Examples
The following example shows how a variable declared static in a function retains its state between calls to that function.
#include <iostream.h>
void showstat( int curr ) {
static int nStatic; // Value of nStatic is retained
// between each function call
nStatic += curr;
cout << "nStatic is " << nStatic << endl;
}
void main() {
for ( int i = 0; i < 5; i++ )
showstat( i );
}
The following example shows the use of static in a class.
#include <iostream.h>
class CMyClass {
public:
static int m_i;
};
int CMyClass::m_i = 0;
void main() {
CMyClass a,b;
cout << a.m_i << endl;
cout << b.m_i << endl;
a.m_i = 1;
cout << a.m_i << endl;
cout << b.m_i << endl;
}