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?


  • Mod

    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.


Log in to reply