2010-01-03 15 views
10

Wofür sind statische Variablen gedacht? Was ist der Unterschied zwischen statischem int und int?Was sind statische Variablen?

+0

Mögliche Duplikate: http://stackoverflow.com/questions/1706675/file-scope-and-static-floats – sellibitze

Antwort

33

Das static Schlüsselwort hat vier separate Anwendungen, von denen nur zwei eng miteinander verwandt sind:

  • statisch auf globaler und Namespacebereich (gilt sowohl für Variablen und Funktionen) bedeutet interne Bindung
    • dies ersetzt durch unnamed namespaces und ist nicht verwandt mit dem Rest
    • vor allem, andere neigen dazu, eine Art von Eindeutigkeit implizieren, aber interne Verknüpfung bedeutet gegenüber: Sie können viele haben Objekte mit dem gleichen Namen, solange jede interne Bindung hat und Sie ein nur
  • statische Datenelemente „shared“ pro Übersetzungseinheit haben unter allen Instanzen der Klasse sind
    • es ist mehr wie sie sind unabhängig von jeder Klasse Instanz
    • dies manchmal
  • statische Methoden auf einer aktuellen Instanz nicht „arbeiten“ mit statischen Methoden gruppiert
    • nein dieser Zeiger;
  • statische lokale Variablen (in Funktionen) können ohne Instanz aufrufen bestehen über den Umfang eines jeden Funktionsaufruf

Sowohl statische Datenelemente und statische lokale Variablen können versteckte globalen Zustand geworden und sollte verwendet werden, vorsichtig.

Nun welche zwei sind eng verwandt? Es ist nicht die zwei Klassenmitglieder — die Warnung über den globalen Zustand gibt es weg. Sie können statische Datenelemente als statische lokale Variablen betrachten, wobei die Funktionen, zu denen sie gehören, alle Methoden der Klasse sind und nicht eine einzelne Funktion.

Ich fand viele related questions, aber, überraschenderweise, keine Duplikate.

3

Ein statisches Element kann ohne eine Instanz referenziert werden.

Siehe „Static Members“ Abschnitt hier: http://www.cplusplus.com/doc/tutorial/classes2/

+1

Die Frage war jedoch über statische Variablen, nicht Mitglieder. –

+0

Es ist nicht klar, dass das OP diese Unterscheidung machte, auch wenn "variabel" der Begriff war. –

+0

@Michael: Was könnte statische Elementvariable bedeuten (es hängt davon ab, was die ursprüngliche Frage ist und es ist nicht 100% klar). –

4

Statische Variablen im Datensegment initialisiert (auf x86; ändern gegebenenfalls für andere Architekturen) statt auf dem Stapel. Sie bestehen für das Leben des Programms anstatt zu verdampfen, sobald sie außer Reichweite geraten.

+0

Es ist nicht klar, aber du scheinst zwei verschiedene Bedeutungen von Statik in einer Definition zu vermischen. –