Udostępnij za pośrednictwem


Statyczne (C++)

static Słowa kluczowego można deklarować zmienne, funkcje, klasy danych członków i funkcje klasy.

Domyślnie obiektu lub zmiennej, która jest zdefiniowana poza wszystkich bloków ma statyczny czas trwania i powiązania zewnętrznych.Statyczne czas trwania oznacza, że obiekt lub zmienna jest przydzielany podczas program zaczyna się i ma deallocated, gdy program kończy pracę.Połączenie zewnętrznych oznacza, że widoczne z zewnątrz pliku, w którym jest zadeklarowana zmienna nazwę zmiennej.Odwrotnie wewnętrzne powiązania oznacza, że nazwa nie jest widoczna na zewnątrz pliku, w którym jest zadeklarowana zmienna.

static Można użyć słowa kluczowego, w następujących sytuacjach.

  • Kiedy zadeklarować zmienną lub funkcji w zakresie pliku (globalnego i/lub zakresu nazw), static słowa kluczowego Określa, że zmiennych lub funkcji ma wewnętrzne powiązania.Przy deklarowaniu zmiennej, zmienna ma czas trwania statycznych i kompilator inicjuje ją na wartość 0, chyba że Określ inną wartość.

  • Przy deklarowaniu zmiennej, funkcji, static słowa kluczowego Określa, że zmienna zachowuje jego stanu między wywołania tej funkcji.

  • Przy deklarowaniu członek danych w deklaracji klasy static słowa kluczowego Określa, że jedna kopia członka jest współużytkowany przez wszystkie wystąpienia tej klasy.Członek danych statycznych musi być zdefiniowana w zakresie pliku.Członkowskie integralną danych, który został zadeklarowany jako conststatic może istnieć inicjator.

  • Przy deklarowaniu funkcji składowej w deklaracji klasy static słowa kluczowego Określa, że funkcja jest współużytkowany przez wszystkie wystąpienia tej klasy.Funkcji członka statycznego nie może uzyskać dostępu do członka wystąpienia, ponieważ funkcja nie jest niejawny this wskaźnik.Aby uzyskać dostęp do członka wystąpienia, należy zadeklarować funkcję z parametr, który jest wskaźnik instancji lub odwołaniem.

  • Nie można zadeklarować członków Unii jako statyczny.Jednak globalnie deklarowanych Unii anonimowe musi być jawnie deklarowane static.

Aby uzyskać więcej informacji, zobacz auto, extern, i zarejestrować.

Przykład

W poniższym przykładzie pokazano, jak zadeklarowana zmienna static w funkcji zachowuje jego stanu między wywołania tej funkcji.

// 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 );
}
  

Następujący przykład przedstawia wykorzystanie static w klasie.

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

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

int CMyClass::m_i = 0;
CMyClass myObject1;
CMyClass myObject2;

int main() {
   cout << myObject1.m_i << endl;
   cout << myObject2.m_i << endl;

   myObject1.m_i = 1;
   cout << myObject1.m_i << endl;
   cout << myObject2.m_i << endl;

   myObject2.m_i = 2;
   cout << myObject1.m_i << endl;
   cout << myObject2.m_i << endl;

   CMyClass::m_i = 3;
   cout << myObject1.m_i << endl;
   cout << myObject2.m_i << endl;
}
  

W poniższym przykładzie zmienna lokalna zadeklarowana static w funkcji składowej.Zmienna statyczna jest dostępne dla całego programu; wszystkie wystąpienia tego typu współużytkują tę samą kopię zmiennej statycznej.

[!UWAGA]

Przypisanie wartości do statyczna zmienna lokalna w wielowątkowych aplikacji nie jest bezpieczne dla wątków i nie zaleca go jako praktyka programowania.

// static3.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
struct C {
   void Test(int value) {
      static int var = 0;
      if (var == value) 
         cout << "var == value" << endl;
      else
         cout << "var != value" << endl;

      var = value;
   }
}; 

int main() {
   C c1;
   C c2;
   c1.Test(100);
   c2.Test(100);
}
  

Zobacz też

Informacje

Słów kluczowych języka C++

Klasy C++ magazynowania

Statyczne Specyfikatory klasy magazynu

Statyczne funkcji elementów członkowskich

Kontrola dostępu i elementy statyczne