[SOLVED] Notwendigkeit von Angabe des Namespaces
-
Hallo zusammen,
unter welchen Bedingungen kann ich auf die Angabe des Namespaces verzichten,
wenn kein using verwendet wird?#include <iostream> namespace csp{ class A{}; void init(A* t); } void csp::init(csp::A* t){ std::cout << "init my A object" << std::endl; } int main(){ csp::A a; init(&a); // kein Namespace notwendig return 0; }Also generell hätte ich erwartet, dass beim Aufruf von init die Angabe
des Namespaces erforderlich ist. Warum ist sie es nicht?
Vermutung: Weil im namespace des ersten(?) Parameters zusätzlich gesucht wird?Gruß,
CSpille
-
-
Das läuft unter dem Namen "argument dependent lookup" oder "Koenig lookup", Herb Sutter hat da einen kurzen Artikel in seinem Guru of the week blog: GotW #30
Edit:
Um 4 Sekunden geschlagen... das nächste Mal lass ich Links weg :p
-
Hallo,
Lies das mal.
http://de.wikipedia.org/wiki/Argument_dependent_name_lookup
-
Merci!!!
-
Eine Nachfrage noch:
Wenn ich den Funktionsaufruf in Klammern setze, verhindere ich ADL?
(init)(&a);Korrekt?
-
Das wäre mir nicht bekannt. Qualifizierte Aufrufe unterbinden jedoch ADL.
csp::init(&a);