Abhängig von Kontext:
Wie viele Dinge in C++, static
verschiedene Dinge bedeuten auf seinem Kontext abhängig.
In C++ ist es üblich, dass dasselbe Wort je nach Kontext unterschiedliche Bedeutungen hat.
Zum Beispiel:
*
ist für die Multiplikation, dereferencing einen Zeiger und das Erstellen von Zeigern verwendet.
&
wird verwendet, um die Adresse von Variablen zu erhalten, um eine Referenz zu deklarieren, und als ein bitweises AND-Operator.
Globale Verwendung statisch:
Wenn Sie eine Funktion oder eine Variable als statisch außerhalb einer Klasse und im globalen Rahmen zu erklären, ist es spezifisch nur diese Datei. Wenn Sie versuchen, diese Variable oder Funktion in einer anderen Datei zu verwenden (über eine Forward-Deklaration), erhalten Sie einen Verknüpfungsfehler.
Beispiel:
a.cpp:
static void fn()
{
cout<<"hello a!"<<endl;
}
b.cpp:
void fn();
void gn()
{
fn();//causes linking error
}
Mit dieser Funktion können Sie eine Funktion verwenden, die keine andere Datei jemals sehen werden, auf diese Weise Sie nicht dazu führen, möglich Linkerfehler eines mehrfach definierten Symbols. Die bevorzugte Methode, dies zu tun ist mit anonymen Namespaces aber:
a.cpp:
namespace
{
void fn() // will be static to a.cpp
{
cout<<"hello a!"<<endl;
}
}
Innerhalb einer Klasse Verwendung statischer:
Wenn Sie eine Funktion oder eine Variable als statisch innerhalb eines deklarieren Klasse (oder Struktur), es ist eine Klassenfunktion oder eine Klassenvariable. Dies bedeutet, dass es nur einen für diese ganze Klasse gibt. Eine Klassenfunktion kann nur Klassenvariablen verwenden.Eine Klassenvariable wird von allen Instanzen dieser Klasse gemeinsam genutzt.
class C
{
public:
static void fn()
{
y = 4;//<--- compiling error
// can't access member variable within a static function.
}
int y;
}
Dies ist ein großartiges Feature zu verwenden, wenn Sie etwas haben, das zur Klasse der Objekte spezifisch ist, sondern auf eine Instanz nicht spezifisch.
Innerhalb einer Funktion zur Verwendung statischer:
Wenn Sie eine Variable als statisch innerhalb einer Funktion deklarieren, können Sie berücksichtigen, dass der Wert der Variablen bei Anrufen anhalten wird. Es wird nur einmal initialisiert.
Beispiel:
//Will print 0, then 1, then 2, ...
void persistentPrintX()
{
static int x = 0;
cout << x << endl;
x++;
}
ich persönlich versuchen, dies zu vermeiden, und Sie sollten wahrscheinlich. Es ist nicht gut, einen globalen Staat zu haben. Es ist besser, Funktionen zu haben, die bei gleicher Eingabe die gleiche Ausgabe garantieren.
Genau wie in der englischen Sprache:
Das Konzept der kontextsensitiven Bedeutung C++ nicht spezifisch ist, können Sie es sogar in der englischen Sprache sehen.
- Ich werde
screen
ein Film
- Die
screen
auf dem Fernseher ist kaputt (Means den Film angezeigt) (Mittel einen Teil des TV)
Andere Bedeutungen in anderen Programmiersprachen :
Je nach Programmiersprache kann es eine andere Bedeutung geben, aber das erste, woran die meisten Leute denken, wenn Sie static
sagen, ist eine Klasse vari able/function gegen eine Elementvariable/Funktion.
Fragen Sie gezielt nach Funktionen, die außerhalb einer Klasse/Struktur deklariert sind? – Bill
Ich habe generell gefragt, danke für den Kommentar, aber Brian hat meine Fragen schon beantwortet. – Dooms101