Noch eine static
Frage.Statisches Schlüsselwort in h-Datei und interne Verknüpfung
- What are static variables?
- file scope and static floats
- http://msdn.microsoft.com/en-us/library/s1sb61xd.aspx
Und ich immer noch nicht verstehen, das folgende Verhalten:: Ich habe folgendes gelesen Ich habe eine h
Datei:
// StaticTest.h
#include <stdio.h>
static int counter = 0;
struct A {
A() {
counter++;
printf("In A's ctor(%d)\n", counter);
}
~A() {
counter--;
printf("In A's dtor(%d)\n", counter);
}
};
static A a;
Und zwei cpp
Dateien:
// StaticTest1.cpp
#include "StaticTest.h"
int main() {
return 0;
}
Und:
// StaticTest2.cpp
#include "StaticTest.h"
Die Ausgabe des Programms ist:
In A's ctor(1)
In A's ctor(2)
In A's dtor(1)
In A's dtor(0)
Nun A
‚s Konstruktor zweimal aufgerufen wird, da die h
Datei ist zweimal enthalten, und da A
's Instanz mit dem Namen a
static
deklariert ist, ist es hat interne Verknüpfung und der Compiler ist glücklich. Da die counter
auch als statisch deklariert ist, hat sie auch interne Verknüpfungen, und ich würde erwarten, dass ihr Wert in den zwei cpp
Dateien nicht geteilt wird --- aber die Programmausgabe impliziert, dass der Wert geteilt wird, da er bis zu 2 zählt
irgendwelche einblicke?
EDIT: Alle Antworten in Bezug auf, was eine „gute Programmier Gewohnheit“ im Zusammenhang mit der Erklärung der statischen Variablen in h
vs. cpp
Dateien wird auch begrüßt betrachtet wird.
Ich mag * * etwas über Implementierungsdetails sagen und kompilieren Zeit initialisierte statische Werte im Vergleich zu Laufzeit initialisiert statische Werte, aber ich bin nicht zuversichtlich, es als Antwort zu veröffentlichen. Versuchen Sie, 'counter' nicht initialisiert zu lassen und initialisieren Sie es in' main() '. –
@ Benoit Thiery: Dies ist der vollständige Quellcode. –
@ Ignacio Vazquez-Abrams: von MSDN-Seite: "Wenn Sie eine Variable deklarieren, hat die Variable statische Dauer und der Compiler initialisiert es auf 0, außer Sie einen anderen Wert angeben" –