Freigeben über


Namespaces (C++)

Die Programmiersprache C++ bietet einen einzigen globalen Namespace. Dies kann Probleme durch globale Namenskonflikten verursachen. Betrachten Sie beispielsweise die folgenden beiden C++-Headerdateien:

char func(char);
class String { ... };

// somelib.h
class String { ... };

Mit diesen Definitionen ist es unmöglich, beide Headerdateien in einem einzigen Programm zu verwenden; die String-Klassen verursachen Konflikte.

Ein Namespace ist ein deklarativer Bereich, der allen Namen, die in ihm deklariert werden, einen zusätzlichen Bezeichner anfügt. Der zusätzliche Bezeichner macht es weniger wahrscheinlich, dass ein Name mit Namen in Konflikt gerät, die an anderer Stelle im Programm deklariert wurden. Es ist möglich, den gleichen Namen in verschiedenen Namespaces ohne Konflikte zu verwenden, auch wenn die Namen in derselben Übersetzungseinheit vorhanden sind. Sofern sie in verschiedenen Namespaces auftreten, ist jeder Name aufgrund des Hinzufügens des Namespacebezeichners eindeutig. Beispiel:

namespace one {
   char func(char);
   class String { ... };
}

// somelib.h
namespace SomeLib {
   class String { ... };
}

Jetzt verursachen die Klassennamen keinen Konflikt, da sie jeweils zu one::String und SomeLib::String werden.

In C++ sind keine zusammengesetzten Namen für Namespaces zulässig.

// pluslang_namespace.cpp
// compile with: /c
// OK
namespace a {
   namespace b {
      int i;
   }
}

// not allowed
namespace c::d {   // C2653
   int i;
}

Deklarationen im Dateibereich einer Übersetzungseinheit, außerhalb aller Namespaces, sind weiterhin Member des globalen Namespace.

Worüber möchten Sie mehr erfahren?

Siehe auch

Referenz

Deklarationen