Eine statische Variable innerhalb einer Funktion wird nur einmal während der Lebensdauer des Programms zugewiesen.
Also wenn ich eine Funktion wie:
habe %Vor%und ich rufe zuerst
an %Vor%und dann
%Vor%Wie groß wird das Array nach dem zweiten Aufruf sein?
static
lokale Variablen werden initialisiert, wenn der Kontrollfluss die Deklaration zum ersten Mal erreicht. In diesem Fall haben Sie seit der ersten Verwendung von 1
als Parameter n
die Größe für ein int
zugewiesen.
Solche Sachen zu machen ist eine schlechte Idee. Sie sollten nur einen lokalen, nicht statischen, std::vector
oder einen anderen übergeordneten Container verwenden.
static
Variablen local Eine Funktion wird initialisiert, wenn die Steuerung sie zum ersten Mal durchläuft. Der relevante Abschnitt in der Norm ist 6.7 [stmt.dcl]. Das heißt, das Array erhält die Größe 1 und behält diese Größe, es sei denn, Sie ändern seine Größe explizit.
Was in C ++ 2011 schön ist, ist, dass die Initialisierung der Variable static
auch Thread-sicher ist: Wenn ein anderer Thread die Instanz erreicht, während die Variable initialisiert wird, wird der zweite Thread blockiert, bis die Initialisierung abgeschlossen ist.
Die Initialisierung statischer Variablen innerhalb einer Funktion erfolgt nur während der ersten Auswertung der statischen Anweisung innerhalb der Funktion. Wenn f
zum ersten Mal mit f(1)
aufgerufen wird, wird die Initialisierung für a
ausgeführt, und sie zeigt auf ein Array eines einzelnen int. Wenn f(3)
aufgerufen wird, wurde a
bereits initialisiert, also die rechte Seite von:
wird nicht erneut ausgewertet, und a
zeigt weiterhin auf das ursprünglich zugewiesene Array der Größe 1.