Normalerweise versuche ich, den Umfang der Variablen so weit wie möglich einzuschränken, solange er nicht merkwürdig oder langweilig wird.
Wenn Sie in class C
1000 Codezeilen haben, davon 100 Codezeilen in der Funktion foo
, müssen Sie für jede Änderung von bar
(z. B. Ändern des Namens oder Typs) mehr als 100 eingeben Codezeilen, um sicherzustellen, dass die Änderung in Ordnung ist. Wenn Sie bar
ein statisches Klassenmitglied hätten, müssten Sie möglicherweise über 1000 Codezeilen gehen, um sicherzustellen, dass bar
dort nicht verwendet wird. Das wäre Zeitverschwendung.
Wenn Sie glauben, dass Sie bar
in einer anderen Funktion foo2
benötigen (z. B. wenn Sie die Anzahl der Aufrufe für foo
und foo2
zusammen zählen), können Sie bar
zu einem statischen Klassenmember machen.
Wenn es sich um eine öffentliche Klasse handelt, muss ein statisches Klassenmitglied die Header-Datei bearbeiten. Dies ist nicht immer wünschenswert.
Eine andere Option ist eine Dateibereichsvariable in einem anonymen Namespace. Dies ist ausreichend, wenn Sie Zugriff nur in einer Methode benötigen, und wenn Sie es in mehreren benötigen.
Sowohl lokale als auch nicht lokale globale Variablen sind "schlecht", da sie global sind. Die Initialisierung und der Zugriff für diese beiden Fälle sind jedoch unterschiedlich. Daher hängt die Antwort, die Sie verwenden, von Ihren Anforderungen in Bezug auf diese Anforderungen ab.
Als Nebenbemerkung ist die dynamische Initialisierung von lokalen Variablen mit statischer Speicherdauer abhängig vom Compiler möglicherweise nicht Thread-sicher. Die gute Nachricht, in C ++ 0x ist es garantiert Thread-sicher.
Objektorientiertes Sprechen, Balken ist Teil des Zustands der Klasse C. Dies ist der Grund, warum ich normalerweise lieber Felder als statische lokale Variablen verwende.