Looking for c++ Keywords? Try Ask4Keywords

C++Namensräume


Einführung

Ein Namensraum ist ein deklaratives Präfix für Funktionen, Klassen, Typen usw., um Namenskollisionen bei der Verwendung mehrerer Bibliotheken zu verhindern.

Syntax

  • Namespace - Kennung (opt) {declaration-Seq}
  • Inline-Namespace- ID ( opt ) { Deklaration-seq } / * seit C ++ 11 * /
  • Inline ( opt ) -Namensraum Attribut- Bezeichner -Seq- Bezeichner ( Opt ) { Deklaration-Seq } / * seit C ++ 17 * /
  • Namespace einschließender-Namespace- Bezeichner : ID { Deklaration-Seq } / * seit C ++ 17 * /
  • Namespace- ID = Qualifizierter-Namespace- Bezeichner ;
  • unter Verwendung des Namespaces verschachtelter-Name-Bezeichner ( opt ) Namespace-Name ;
  • Attributspezifizierer-seq unter Verwendung des Namespaces verschachtelter Namensspezifizierer ( opt ) Namespace-Name ; / * seit C ++ 11 * /

Bemerkungen

Das Schlüsselwort namespace hat drei verschiedene Bedeutungen je nach Kontext:

  1. Wenn auf einen optionalen Namen und eine geschweifte Klammerfolge von Deklarationen gefolgt wird, wird ein neuer Namespace definiert oder ein vorhandener Namespace um diese Deklarationen erweitert. Wenn der Name weggelassen wird, ist der Namespace ein unbenannter Namespace .

  2. Wenn ein Name und ein Gleichheitszeichen gefolgt werden, wird ein Namespace-Alias ​​angegeben .

  3. Wenn vorangestelltem using und von einem Namespace - Namen gefolgt, bildet es ein using - Direktive , die Namen im angegebenen Namespace ermöglicht durch unqualifizierte Namen - Suche gefunden werden (aber nicht die Namen im aktuellen Bereich neu deklarieren). Eine using-Direktive darf nicht im Klassenbereich vorkommen.

using namespace std; ist entmutigt. Warum? Denn der namespace std ist riesig! Dies bedeutet, dass die Wahrscheinlichkeit groß ist, dass Namen kollidieren:

//Really bad!
using namespace std;

//Calculates p^e and outputs it to std::cout
void pow(double p, double e) { /*...*/ }

//Calls pow
pow(5.0, 2.0); //Error! There is already a pow function in namespace std with the same signature,
               //so the call is ambiguous

Namensräume Verwandte Beispiele