Sdílet prostřednictvím


Statické (C++)

static Klíčové slovo lze deklarovat proměnné, funkce, datové členy třídy a funkce třídy.

Standardně má objekt nebo proměnnou, která je definována mimo všechny bloky statické trvání a externí propojení.Statické trvání znamená, že objektu nebo proměnné je přiřazen při program spustí a je deallocated při ukončení programu.Externí navázání znamená viditelné z vnějšku souboru, ve kterém je deklarována proměnná název proměnné.Naopak vnitřní propojení znamená název není viditelná mimo soubor, ve kterém je proměnná deklarována.

static Klíčové slovo, které lze použít v následujících situacích.

  • Pokud deklarujete proměnnou nebo funkce v rozsahu souboru (globální nebo obor názvů), static klíčové slovo Určuje proměnnou nebo funkci má vnitřní propojení.Při deklarování proměnné s proměnnou statické trvání a kompilátor inicializuje ji 0 Pokud neurčíte jinou hodnotu.

  • Při deklarování proměnné, funkce, static klíčové slovo určuje, že zůstane proměnné stavu mezi volání funkce.

  • Když deklarujete datový člen v deklaraci třídy, static klíčové slovo Určuje jednu kopii člen sdílí všechny instance třídy.Statický datový člen musí být definovány v rozsahu souboru.Nedílnou datový člen, který deklarovat jako conststatic může mít inicializátor.

  • Když deklarujete členské funkce v deklaraci třídy static Určuje klíčové funkce sdílí všechny instance třídy.Funkce statický člen nemůže přistupovat instanci člena, protože nemá implicitní funkce this ukazatel.Chcete-li získat přístup k instanci člena, Deklarujte funkci s parametrem, který je instance ukazatele nebo odkaz.

  • Nelze deklarovat členy unie jako statické.Však globálně prohlášených anonymní unie musí být explicitně deklarovány static.

Další informace naleznete v tématu automaticky, extern, a zaregistrovat.

Příklad

Následující příklad ukazuje, jak deklarovat proměnnou static funkce zůstane stavu mezi volání funkce.

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

Následující příklad ukazuje použití static ve třídě.

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

Následující příklad zobrazuje místní proměnné deklarované static v členské funkce.Statická proměnná je k dispozici pro celý program; všechny instance typu sdílet stejnou kopii statické proměnné.

[!POZNÁMKA]

Přiřazení hodnoty Statická lokální proměnná ve víceprocesových aplikací není bezpečné podprocesy a nedoporučujeme ji z hlediska programování.

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

Viz také

Referenční dokumentace

Klíčových slov jazyka C++

Třídy úložiště C++

Statické Specifikátory paměťových tříd

Statická funkce členů

Řízení přístupu a statické členy