Ich bin verwirrt über die Verwendung von Direktive.
Gemäß C ++ 11 Standard §7.3.4 S.3,
Eine using-Anweisung fügt dem deklarativen Bereich, in dem sie angezeigt wird, keine Member hinzu.
Darüber hinaus behandelt der C ++ 11-Standard §7.3.4 keine qualifizierte Namenssuche.
Daher hat IMHO using-directive keinen Einfluss auf die Suche nach qualifizierten Namen.
Ich denke beispielsweise, dass der folgende Beispielcode einen Kompilierungsfehler verursachen sollte.
Aber sowohl gcc als auch clang kompilieren diesen Code erfolgreich. ( Ссылка )
Darüber hinaus besagt C ++ 11 Standard §7.3.1.1, dass sich eine unbenannte Namespace-Definition so verhält, als wäre sie durch
ersetzt worden %Vor%und zeigt folgendes Beispiel (der unnötige Teil wurde weggelassen).
%Vor% In diesem Beispiel wird angegeben, dass A::i
der Funktion h
auf das unbenannte Namespacemitglied i
verweisen kann.
Hilf mir, ich kann es nicht mehr verstehen.
Würdest du mir die richtige Interpretation der using-Direktive beibringen?
Nach 7.3.4
Eine using-Direktive gibt die Namen im nominierten Namespace an kann in dem Bereich verwendet werden, in dem die using-Direktive danach erscheint die Verwendungsrichtlinie. Bei der Suche nach unqualifizierten Namen (3.4.1) Namen erscheinen so, als wären sie in der nächsten Einhüllenden deklariert Namensraum, der sowohl die using-Direktive als auch die nominierte enthält Namensraum. [Hinweis: In diesem Kontext bedeutet "enthält" "enthält direkt oder indirekt". - Endnote]
Eine using-Direktive fügt dem deklarativen Bereich keine Member hinzu in dem es erscheint.
Die obige Interpretation besagt, dass eine using-Direktive die Namen in einen Bereich zieht, aber nicht die Deklaration (Namespacemitglied), sich selbst.
Dies könnte es veranschaulichen:
%Vor%Im zweiten Beispiel gibt es zwei unbenannte Namespaces:
Einige kleine Änderungen anwenden:
%Vor%Tags und Links c++