In C ++, was passiert, wenn zwei verschiedene Funktionen die gleiche statische Variable deklarieren?

StackOverflow https://stackoverflow.com/questions/4108147

Frage

void foo() {
    static int x;
}

void bar() {
    static int x;
}

int main() {
    foo();
    bar();
}
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top