¿Le resultó útil esta página?
Sus comentarios sobre este contenido son muy importantes. Háganos saber su opinión.
¿Tiene comentarios adicionales?
Caracteres restantes: 1500
MSDN Library
EN
Este contenido no se encuentra disponible en su idioma, pero aquí tiene la versión en inglés.

Static

Grammar

storage-class-specifier:
static

When modifying a variable, the static keyword specifies that the variable has static duration (it is allocated when the program begins and deallocated when the program ends) and initializes it to 0 unless another value is specified. When modifying a variable or function at file scope, the static keyword specifies that the variable or function has internal linkage (its name is not visible from outside the file in which it is declared).

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.

For related information, see auto, extern, and register.

Example

The following example shows how a variable declared static in a function retains its state between calls to that function.

// static1.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
void showstat( int curr ) {
   static int nStatic;    // Value of nStatic is retained
                          // between each function call
   nStatic += curr;
   cout << "nStatic is " << nStatic << endl;
}

int main() {
   for ( int i = 0; i < 5; i++ )
      showstat( i );
}

Output

nStatic is 0
nStatic is 1
nStatic is 3
nStatic is 6
nStatic is 10

Example

The following example shows the use of static in a class.

// static2.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
class CMyClass {
public:
   static int m_i;
};

int CMyClass::m_i = 0;

int 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;
}

Output

0
0
1
1

See Also

C++ Keywords | C++ Storage Classes | Static Storage-Class Specifiers | Static Member Functions | Access Control and Static Members

Mostrar:
© 2015 Microsoft