2015-07-04 2 views
18

In [namespace.udecl]/10 haben Sie das folgende Beispiel:Eine using-Deklaration kann nicht im Funktionsumfang wiederholt werden. Warum das?

namespace A { 
    int i; 
} 
namespace A1 { 
    using A::i; 
    using A::i; // OK: double declaration 
} 
void f() { 
    using A::i; 
    using A::i; // error: double declaration 
} 

Dieser Code-Schnipsel in Klirren kompiliert.

+1

Welches praktische Problem verursacht Sie? –

+0

@LightnessRacesinOrbit: Diese Frage ist eine Sprache-Laywer-Frage. Für solche Fragen müssen keine praktischen Probleme bestehen, damit sie interessant sind. Es gibt ungefähr die Definition der Programmiersprache. – Supremum

+0

10 @Supremum: [_ "Wenn Ihre Frage im Allgemeinen ... ein praktisches, beantwortbares Problem behandelt ... dann sind Sie an der richtigen Stelle, um Ihre Frage zu stellen!" _] (Http://stackoverflow.com/help/on-topic) Es könnte interessant sein, aber es ist nicht am Thema. –

Antwort

7

Die erste ist eine Deklaration in einem Namespace, und die mehrfache Verwendung von Anweisungen kann häufig mit #includes vorkommen. Die zweite ist innerhalb einer Definition einer Funktion, und Sie würden das nie tun, wenn Sie einen Fehler gemacht hätten. Sie können zum Beispiel auch nicht zweimal das gleiche Symbol definieren, aber Sie können mehrmals deklarieren.

Die using-Anweisung ist auch mehr als nur eine Deklaration. Es ist ein bisschen stärker, da es eine Funktion von einem Namespace in einen anderen importiert. Zum Beispiel kann es eine Memberfunktion einer geschützten Basisklasse in eine abgeleitete Klasse ziehen, um sie öffentlich zu machen. Es ist fast eine Definition durch Verknüpfung.

+0

Könnten Sie ein Zitat aus dem Standard bieten? – Belloc

+0

Die Antwort auf diese verwandte Frage löst diese Frage: http://stackoverflow.com/questions/31224886/program-with-chaining-of-using-declarations-compiles-on-msvs-and-clang-but-not-o Beachten Sie, dass das Beispiel [namespace.udecl]/10 falsch ist und gerade als Reaktion auf meine Frage geändert wurde. – Supremum

Verwandte Themen