Initialisierung statischer Variablen auf Funktionsebene
In C sind statische Variablen auf Funktionsebene ein nützlicher Mechanismus zur Aufrechterhaltung des Zustands innerhalb von Funktionen. Ihr Zuordnungs- und Initialisierungsprozess wirft jedoch manchmal Fragen auf.
Im Gegensatz zu global deklarierten Variablen, die beim Programmstart zugewiesen und initialisiert werden, werden statische Variablen auf Funktionsebene erst zugewiesen oder initialisiert, wenn die Funktion zum ersten Mal aufgerufen wird .
Bedenken Sie den folgenden Codeausschnitt:
void doSomething() { static bool globalish = true; // ... }
In diesem Beispiel wird die statische Variable globalish erst zugewiesen oder initialisiert die Funktion doSomething() wird aufgerufen. Um dies zu demonstrieren, analysieren wir ein Testprogramm:
#include <iostream> class test { public: test(const char *name) : _name(name) { std::cout << _name << " created" << std::endl; } ~test() { std::cout << _name << " destroyed" << std::endl; } std::string _name; }; test t("global variable"); void f() { static test t("static variable"); test t2("Local variable"); std::cout << "Function executed" << std::endl; } int main() { test t("local to main"); std::cout << "Program start" << std::endl; f(); std::cout << "Program end" << std::endl; return 0; }
Bei der Kompilierung und Ausführung zeigt die Ausgabe, dass der Konstruktor für die statische Variable t in der Funktion f() erst aufgerufen wird, wenn die Funktion für aufgerufen wird Zum ersten Mal:
global variable created local to main created Program start static variable created Local variable created Function executed Local variable destroyed Program end local to main destroyed static variable destroyed global variable destroyed
Daher werden statische Variablen auf Funktionsebene nicht beim Programmstart zugewiesen oder initialisiert, sondern beim ersten Aufruf der Funktion, in der sie sich befinden definiert.
Das obige ist der detaillierte Inhalt vonWann werden statische Variablen auf Funktionsebene in C initialisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!