Bei dieser Frage habe ich mich gefragt, ob es jemals nützlich / notwendig ist, Klassennamen (einschließlich des globalen Bereichsoperators) in einer nicht funktionsfähigen Elementfunktionsdefinition vollständig zu qualifizieren.
Einerseits habe ich das noch nie zuvor gesehen (und die Syntax dafür scheint dunkel zu sein). Auf der anderen Seite ist die Suche nach C ++ - Namen nicht trivial, sodass möglicherweise ein Eckfall vorliegt.
Frage:
Gibt es jemals einen Fall, in dem die Einführung einer nicht funktionierenden Elementfunktionsdefinition von von
ReturnType (::Fully::Qualified::Class::Name::MemberFunctionName)(...) { ... }
abweicht
ReturnType Fully::Qualified::Class::Name::MemberFunctionName(...) { ... }
(kein globales Gültigkeitsbereichspräfix ::
)?
Beachten Sie, dass Definitionen von Elementfunktionen in einen Namespace eingefügt werden müssen, der die Klasse einschließt. Dies ist also kein gültiges Beispiel.
Antworten:
Eine using-Direktive kann dazu führen
Fully
, dass sie ohne Einschränkung nicht eindeutig ist.quelle
Es ist notwendig, wenn man Masochist ist und gerne solche Sachen schreibt
Man kann natürlich die zweite Überladung wie
foo::foo::bar::baz
im globalen Bereich schreiben , aber die Frage war, ob die beiden Deklarationen eine unterschiedliche Bedeutung haben können oder nicht. Ich würde nicht empfehlen, solchen Code zu schreiben.quelle
using
. Schön, dass verschiedene Fälle hervorgehoben werden!Wenn eine using-Direktive verwendet wird, kann es zu einem verwirrenden Code kommen.
Betrachten Sie das folgende Demonstrationsprogramm
Also zur Lesbarkeit dieser qualifizierte Name
zeigt genau, wo die Funktion deklariert ist.
quelle