static Funktionen
-
Es geht nicht um Sichtbarkeiten, sondern Data Segment
Wie werden die Funktionen, die static definiert sind,im Data Segment angelegt?
Hier ein Beispiel in C (C++ muss gleich sein)static void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void main() { swap(&x,&y); }im Data Segment werden folgende Daten registiert
Rücksprung Adresse bei 32bit-Machine 4 Byte , pointer a 4 Byte, pointer b 4 Byte
also insg. 12 Bytes, die sind fast wie global in dieser Datei, und die 32 bytes werden nicht gelöscht solange das program laeuft.richtig??????
-
Also IMHO landen static Funktionen genauso im Codesegment wie andere, und die lokalen Variablen dieser Funktion landen auf dem Stack, nicht im Datensegment...
-
Habe ich beim Recherchieren gefunden:
*Die Bedeutung des Schlüsselwortes static ist kontextabhängig:
1. static in einer Funktionsdeklaration bewirkt, daß die Funktion nur in diesem Quelltextfile sichtbar ist.
2. static bei einer Variablendeklaration innerhalb einer Funktion bewirkt, daß die Funktion diesen Wert zwischen Funktionsaufrufen behält. Siehe static Variablen.*
-
Also IMHO landen static Funktionen genauso im Codesegment wie andere, und die lokalen Variablen dieser Funktion landen auf dem Stack, nicht im Datensegment...
d.h. es gibt keinen Unterschied zwischen statischer und normaler Funktion ausser Sichtbarkeit
-
static Varible und Function sind wie normale C global definierte Variable und Funktion, bis auf die Sichtbarkeit.
class foo { private: static int data; public: static void changed(); } ; foo::data = 0; void foo::changed() { --data; } void main() { int d = foo::data;//data von aussen sichtbar foo::changed(); //static Funktion von aussen sichtbar d = foo::data; }wenn ich statt static Funktion innerhalb von class global definiere
class foo { } ; int data = 0; changed() { --data; } void main() { int d = data;//globale changed(); //globale d = data; }die Beiden Programm sollten identisch sein.
eigentlich C++ kann C ersetzen mit objectorientierung.
In diesem Fall scheint es sehr lahm. Nach dem Motto"C++ ist ein objectorientierte Sprache, ich muss alles in einer Klasse packen"