Statische Funktionen??
-
Statische Variablen versteh ich ja noch aber statische Funktionen...?!
Was ist bei den beiden Funktionen anders?
void print(int a) { cout << a; } static void print(int a) { cout << a; }
-
Statische Funktionen haben eine interne Bindung, d.h. die Funktion kann nur innerhalb der cpp benutzt werden, wo sie auch definiert ist. In C++ benutzt man dafür anonyme Namensbereiche:
namespace { void foo(int) { } // static void foo(int) }
Statische Members haben dagegen eine externe Bindung.
-
Aber was soll einem das bringen? Oder wann is sowas sinnvoll?
-
Statische Funktionen machen in Klassen Sinn. Wenn du z.B.
class foo { public: static void bar(); };
hast, brauchst du keine Instanz von foo zu erstellen und kannst die Mehtode direkt aufrufen:
int main(){ foo::bar(); }
-
Shlo: Was du erzählst, hab ich noch nicht gehört. Kann aber gut stimmen. Den einzigen Unterschied, den ich kenne, ist der, dass statische Memberfunktionen einer Klasse immer genau einmal existieren, egal wie viele (oder ob überhaupt eine) Instanz(en) dieser Klasse gebildet wurde(n).
-
Gast007 schrieb:
Aber was soll einem das bringen? Oder wann is sowas sinnvoll?
Zum Beispiel braucht man in verschiedenen Übersetzungseinheiten einen eigenen operator new:
namespace { void* operator new(std::size_t) { /*...*/ } }
Wenn die Funktion keine interne Bindung hätte, würde sich der Linker beschweren, dass ein op new bereits irgendwo anders definiert sei.
-
CME386 schrieb:
Shlo: Was du erzählst, hab ich noch nicht gehört. Kann aber gut stimmen. Den einzigen Unterschied, den ich kenne, ist der, dass statische Memberfunktionen einer Klasse immer genau einmal existieren, egal wie viele (oder ob überhaupt eine) Instanz(en) dieser Klasse gebildet wurde(n).
auch normale Member-Funktionen existieren normalerweise nur einmal ;), es wird lediglich ein verschieder this-Zeiger an die Methode übergeben. Du meinst sicherlich statische Variablen.
-
Shlo: Mist, verwechselt. Aber ist es nicht so, dass nicht statische Memberfunktionen erst in den Speicher gerufen werden, wenn die erste Instanz von einer Klasse gebildet wurde?