Namespaces in Source und Header



  • Habe verschiedene Implementierungen von namespaces gesehen. Ich ziehe folgenden Aufbau vor:

    // a.h
    namespace a {
    extern int n_public;
    extern void f_public();
    }  // namespace a
    
    // a.cc
    namespace {
    int n_local;
    void f_local();
    }  // anonymous namespace
    
    namespace a {
    int n_public;
    void f_public() {
    }
    }  // namespace a
    
    namespace {
    void f_local() {
    }
    }  // anonymous namespace
    

    Da die anonyme namespace das static von C in diesem Zusammenhang ersetzt, vermute ich dass obige Implementierung korrekt sein sollte. In anderen Implementierungen sind n_local und f_local() im cc-file in die namespace a gepackt, was ich nicht verstehe?



  • Tomahawk schrieb:

    Da die anonyme namespace das static von C in diesem Zusammenhang ersetzt,

    Naja, es macht schon etwas anderes. Aber der Einsatzzweck ist derselbe.

    Tomahawk schrieb:

    vermute ich dass obige Implementierung korrekt sein sollte.

    Korrekt in sofern, dass es wahrscheinlich das macht, was Du willst, ja.

    Tomahawk schrieb:

    In anderen Implementierungen sind n_local und f_local() im cc-file in die namespace a gepackt, was ich nicht verstehe?

    Was genau verstehst Du nicht?



  • Was ist denn ein anonymes namespace?



  • 314159265358979 schrieb:

    Was ist denn ein anonymes namespace?

    Ein Namespace der keinen Namen hat. Dieser kann dann z. B. globale Variablen Fassen die in anderen Übersetzungseinheiten nicht verwendet werden können.



  • HighLigerBiMBam schrieb:

    [...] die in anderen Übersetzungseinheiten nicht verwendet werden können.

    ...zumindest nicht über ihren Namen.



  • krümelkacker schrieb:

    HighLigerBiMBam schrieb:

    [...] die in anderen Übersetzungseinheiten nicht verwendet werden können.

    ...zumindest nicht über ihren Namen.

    Klar kann man das mit einer Funktion umgehen, aber das gilt für so einiges in C++.


Anmelden zum Antworten