Frage zu static und static const

moin


Z.b. bei der Funktion:
Code:
void keineahnung()
{
    int wert = 0;
    wert++;
}
ist wert am Ende der Funktion immer 1

Bei der Funktion:
Code:
void keineahnung()
{
    static int wert;
    wert++;
}
ist wert das erste mal am Ende der Funktion 1 und wird dann bei jedem Aufruf der Funktion um 1 erhöht.


mfg
umbrasaxum
 
Xebov hat gesagt.:
Hi

Kann mir jemand erklären was das static macht wenn mans davor setzt?

MFG
Xebov

Wenn du das Schlüsselwörtchen static vor eine Variable setzt sagst
du dem Compiler damit das die Variable zur ganzen Laufzeit über
existieren soll sprich wenn du eine lokale Variable als static deklarierst
wird sie beim verlassen des Blocks nicht gelöscht sondern bleibt
im Speicher erhalten...
In Punkto objektorientierung also bei Klassen, bedeutet static im
Prinzip dasselbe. Will heißen wenn du ein Attribut einer Klasse als
static deklarierst machst du sie zum Klassenattribut. Der Wert dieser
Variablen ist somit für alle Objekte gleich und es gibt nur ein
Exemplar dieser Variable (nicht wie bei einem normalen Attribut pro
Objekt, sondern einmal für alle Objekte) => eine Klassenvariable
exisitert unabhängig von der Existenz irgendwelcher Objekte dieser
Klasse.
//edit
@umbrasaxum
Der Wert muss nicht 1 am Ende des ersten Aufrufs deiner Funktions sein, da du die Variable nicht initialisierst...

Gruß

RedWing
 
Zuletzt bearbeitet:
Guten Abend vorerst!

Also folgendes ...

const Variablen/Datenobjekte sind konstant definiert und dessen Wert kann durch das Programm nicht mehr verändert werden.

Welche mit static vorran werden nicht mehr auf dem "Stack" unterhalten sondern wie externe Variablen im Datenseqment des Programms selbst.
Das heißt ihre Lebensdauer ist global. Der Geltungsbereich ist aber eingeschränkt.
Wenn man jetzt eine static Variable außerhalb jeder Funktion definiert, ist sie modulglobal und es gibt keine Probleme mit gleichnamigen Variablen aus anderen Quelldatein. Sie kann nur in diesem Modul verwendet werden und ihr Name wird nicht an den "Linker" weitergegeben. Sie ist also privat ...
Das gleiche gilt auch in einem Block (mit {}). Ihr Wert bleibt beim Verlassen des Blocks erhalten und du kannst dann wenn du wieder eintrittst weiterrechnen etc.

Das war jetzt großteils jetzt auf Variablen bezogen.
Also static const ist soweit ich das durchblicke modulglobal und kann nur von außerhalb des Programms verändert werden.
Bitte verbessert mich wenn ich mich irre.

Erkundige dich vielleicht auch mal unter Speicherklassen.

Mit freundlichen Grüßen und
noch einer guten Nacht
Florian
 
Es gibt noch eine weitere Bedeutung von static:
Wenn eine Memberfunktion einer Klasse als static deklariert wird, ist sie auch ohne ein entsprechendes Objekt verwendbar. Ein Beispiel ist die MFC-Funktion
Code:
static void PASCAL CFile::Remove( LPCTSTR lpszFileName );
Damit kann man auch eine Datei löschen, wenn man kein CFile-Objekt davon anlegt.
 

Neue Beiträge

Zurück