17 Stimmen

C++ Namensraumfrage

Ich arbeite an einem Code, der von einem ehemaligen Mitarbeiter geschrieben wurde, der nicht mehr im Unternehmen arbeitet, und ich habe den folgenden Code gefunden: (den ich unten gekürzt habe)

namespace NsA { namespace NsB { namespace NsC {

    namespace { 
        class A { /*etc*/ };
        class B { /*etc*/ };
    }    

    namespace {
        class C { /*etc*/ };
    }
} } }

Ich verstehe den Zweck der Namespace-Befehle in den Zeilen 3 und 8 nicht.
Kann mir jemand erklären, was der Zweck eines Namespace-Eintrags ohne Namen ist?
Vielen Dank

36voto

Joris Timmermans Punkte 10536

Dies ist ein "anonymer Namespace" - der einen versteckten Namesraum erstellt, der garantiert pro "Übersetzungseinheit" (d.h. pro CPP-Datei) eindeutig ist.

Dies bedeutet effektiv, dass alle Elemente innerhalb dieses Namesraums von außerhalb dieser Kompilierungseinheit ausgeblendet sind. Sie können nur in derselben Datei verwendet werden. Siehe auch diesen Artikel zu unbenannten Namesräumen.

0 Stimmen

Interessant. Ich wusste nicht, dass Sie das tun könnten. Ich werde das im Hinterkopf behalten.

0 Stimmen

Es macht auch die Notwendigkeit von static Variablen (Kompilierungseinheitssichtbarkeit) überflüssig.

1 Stimmen

Static ist gelegentlich immer noch nützlich. Es sorgt dafür, dass die Namen nicht über eine externe Verknüpfung verfügen, während anonyme Namensräume die Verknüpfung der Namen ändern werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X