In C ++, was passiert, wenn zwei verschiedene Funktionen die gleiche statische Variable deklarieren?
-
29-09-2019 - |
Frage
void foo() {
static int x;
}
void bar() {
static int x;
}
int main() {
foo();
bar();
}
Lösung
Sie verfügen jeweils sehen nur ihre eigenen. Eine Variable kann nicht „gesehen“ von außerhalb des Umfang , dass es in deklariert wird.
Wenn auf der anderen Seite, haben Sie diese:
static int x;
void foo() {
static int x;
}
int main() {
foo();
}
dann sieht foo()
nur seine lokale x
; die globale x
„versteckt“, indem sie es ist. Aber Änderungen an einem nicht den Wert des anderen beeinflussen.
Andere Tipps
Die Variablen sind verschieden, jede Funktion verfügt über einen eigenen Anwendungsbereich. Obwohl also beide Variablen zuletzt für die gesamte Lebensdauer des Prozesses, stören sie nicht miteinander.
Das ist völlig in Ordnung. In der Praxis kann der tatsächliche Name der Variablen in der Ausgabe des Compilers gedacht werden als so etwas wie function_bar_x
, das heißt ist es in der Verantwortung des Compilers, um sicherzustellen, dass diese nicht kollidieren.
Im Moment passiert, beide Variablen haben ihren Umfang und behalten ihre Werte in Call anrufen
Die beiden statischen Vars unterschiedlich sind.
Der compilator übersetzt jede Variable in einer einzigartigen Art und Weise, wie foo_x
und bar_x
in Ihrem Beispiel, so dass sie anders threated werden.
Tun Sie dies nicht als Ihr Code schwer zu lesen und zu pflegen nach einiger Zeit, da Sie nicht in der Lage werden auf einmal von zu fangen, was x
sind Sie beziehen.