Statische lokale Variablen in Methoden eine schlechte Praxis?

8

Es gibt etwas, das mich nervt.

Ist es in einem Programm ohne Thread besser, lokale statische Variablen (interne Methoden) oder statische Klassenmitglieder zu haben?

In diesem Beispiel:

%Vor%

Ist es eine schlechte Übung, wenn bar nur in C::foo() verwendet wird?

    
Manux 29.12.2010, 17:49
quelle

5 Antworten

7

Weder ist besser. Sie dienen sehr unterschiedlichen Anwendungsfällen

    
Falmarri 29.12.2010, 17:52
quelle
4

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.

    
anatolyg 29.12.2010 18:29
quelle
2

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.

    
Andy Thomas 29.12.2010 17:55
quelle
0

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.

    
Gene Bushuyev 29.12.2010 18:07
quelle
0

Objektorientiertes Sprechen, Balken ist Teil des Zustands der Klasse C. Dies ist der Grund, warum ich normalerweise lieber Felder als statische lokale Variablen verwende.

    
Ilya Kogan 29.12.2010 17:52
quelle

Tags und Links