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