Namespace ohne namen
-
Liebe Leser.
Ich habe mal eine Frage.
Was bedeutete eigentlich ...
namespace { .... }
Ich habe diesen Code zufällig gefunden.
Da müsste doch eigentlich ein Name hinter namespace stehen. oder?
-
Das ist ein anonymer Namensraum.
Auf Entitäten die in einem solchen Namensraum deklariert werden kann nicht von anderen Übersetzungseinheiten aus zugegriffen werden. Stehen in zwei ÜEs anonyme Namensräume
// A.cpp namespace { void f() {} } // B.cpp namespace { void f() {} }
dann sind das Definitionen von zwei verschiedenen Funktionen, die ODR wird damit nicht verletzt.
Sie sind generell nützlich wenn man Probleme mit der ODR hat.
-
Das sollte man immer verwenden, wenn etwas lokal in einer Source-datei definiert wird, wobei fuer einzelne Funktionen auch static ok ist.