Freigeben über


Namespaces (C++)

Die Programmiersprache C++ stellt einen einzelnen globalen Namespace.Dies kann Probleme bei globalen Name konflikten 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 einzelnen Programm zu verwenden. String die Klassen zusammen auftreten.

Ein Namespace ist ein deklarativer Bereich, der einen zusätzlichen Bezeichner zu allen Namen angefügt wird, die in der sie deklariert werden.Der zusätzliche Bezeichner macht sie weniger wahrscheinlich, dass ein Name mit dem Namen verursacht, die an anderer Stelle im Programm deklariert werden.Es ist möglich, demselben Namen in verschiedenen Namespaces ohne Konflikte zu verwenden, auch wenn die Namen in derselben Übersetzungseinheit angezeigt werden.Sofern sie in verschiedenen Namespaces vorhanden sind, ist aufgrund von jeder Name eindeutig Addition des Namespaces Bezeichners.Beispiele:

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

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

Nun auftritt, weil sie nicht die Klassennamen und one::String werden SomeLib::Stringjeweils zusammen.

C++ lässt Doppelnamen keine Namespaces an.

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

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

Deklarationen im Dateigültigkeitsbereich einer Übersetzungseinheit, außerhalb aller Namespaces, sind weiterhin Member des globalen Namespaces.

Worüber möchten Sie mehr erfahren?

Siehe auch

Referenz

Deklarationen