Freigeben über


Namespace-Deklaration

Eine Namespace-Deklaration bestimmt und ordnet einem USER-deklarierten Namespace einen eindeutigen Namen zu.

namespace identifier

Hinweise

Solche Namespaces werden verwendet, um das Problem eines Namenskonflikts in großen Programmen und Bibliotheken zu lösen. Programmierer können Namespaces verwenden, um neue Softwarekomponenten und -bibliotheken zu entwickeln, ohne Namenskonflikte mit vorhandenen Komponenten zu verursachen.

Beispiel:

// namespace_declaration1.cpp
namespace X
{
   int i;
   double j;
}
int main()
{
   X::i++;
}

Die Syntax für eine Namespacedefinition ist:

namespace identifier
{
   [ declaration-list ]
}

Eine namespace-definition kann in einer anderen namespace-definition geschachtelt werden. Jede namespace-definition muss entweder im Dateigültigkeitsbereich oder unmittelbar in einer anderen namespace-definition angezeigt werden

Beispiel:

// namespace_declaration2.cpp
// C2870 expected
namespace A
{
   int j = 3;
   int f(int k);
}

namespace Outer
{
   int n = 6;
   int func(int num);

   namespace Inner
   {
      float f = 9.993;
   }
}

int main()
{
   namespace local   // C2870: not at global scope
   {
   }
}

Im Gegensatz zu anderen deklarativen Bereichen kann die Definition eines Namespace über mehrere Teile einer einzelnen Übersetzungseinheit aufgeteilt werden.

// namespace_declaration3.cpp
namespace A
{
   // declare namespace A variables
   int i;
   int j;
}

namespace B
{
}

namespace A
{
   // declare namespace A functions
   void func(void);
   int int_func(int i);
}

int main()
{
}

Wenn ein Namespace nach seiner ursprünglichen Definition auf diese Weise fortgesetzt wird, wird die Fortsetzung als Namespace-Definitionserweiterung bezeichnet. Die ursprüngliche Definition dieses Namespace ist die ursprüngliche Namespacedefinition.

Die Verwendung dieser Notation kann bei längeren Namen oder in großen Programmen aufwendig sein. using declaration, using directive und namespace aliases stellen einfachere Methoden zum Verweisen auf Namespacemember zur Verfügung.

Eine Namespace-Deklaration muss unabhängig davon, ob sie einen neuen Namespace, einen unbenannten Namespace oder eine erweiterte Namespacedefinition einschließt, von einem in geschweiften Klammern eingeschlossenen Namespace-Text begleitet werden. Die Anweisung

namespace X;

ist ein Syntaxfehler. Die Anweisung

namespace X{};

Ist kein Syntaxfehler, aber ohne Bedeutung.

Weitere Hintergrundinformationen finden Sie unter Namespaces.

Der Bezeichner in einer ursprünglichen Namespace-Definition muss in dem deklarativen Bereich eindeutig sein, in dem er verwendet wird. Der Bezeichner ist der Name des Namespace und wird verwendet, um auf seine Member zu verweisen.

Der deklarative Bereich einer Namespace-Definition ist deren Text. Der Text muss in geschweiften Klammern ({}) eingeschlossen sein und kann Deklarationen oder Definitionen von Variablen, Funktionen, Objekten, Vorlagen und geschachtelten Namespaces enthalten. Die Deklarationen in der declaration-list gelten als Member des Namespace. Der Name jedes Namespace-Members wird automatisch durch den Namen des Namespace und den Bereichsauflösungsoperator qualifiziert.

Siehe auch

Referenz

Namespaces (C++)

C++-Schlüsselwörter

Unbenannte Namespaces