Ich fragte mich,
%Vor%Warum kann ich das nicht schreiben als:
%Vor% Natürlich würde der Typ, der die Map definiert, den ersten Code weniger ausführlich machen - aber das ist nicht mein Punkt. Der Compiler kennt den Typ von mymap
. Warum also nicht mymap::iterator
auflösen? Gibt es einen Grund, warum iterator
nicht über die Instanz zugänglich ist?
::
ist ein Scope-Resolution-Operator, der auf der linken Seite den Typnamen oder den Namespace-Namen erwartet. Es akzeptiert keine Objektnamen auf der linken Seite. Dies zuzulassen würde wahrscheinlich viele Dinge in der Sprache überkomplizieren.
Wenn man so etwas erlauben würde, würde man diese Funktionalität wahrscheinlich an den Operator .
anhängen, da .
operator derjenige ist, der mit Objekten auf der LHS verwendet wird
Aber das würde die Dinge ohnehin unnötig verkomplizieren.
Im zukünftigen C ++ - Standard wird so etwas durch decltype
keyword
P.S. Laut dem Wikipedia-Artikel über decltype
war seine Verfügbarkeit in qualifizierten IDs Gegenstand von Debatten. Wenn ich es richtig verstanden habe, wurde diese Verwendung schließlich gewählt.
P. P. S. Wie in Kommentaren von @Asha angemerkt, können Sie in der Zukunft C ++ vermeiden, den Typ überhaupt zu benennen
%Vor%Dieser Iterator ist ein Typ, der im Bereich der Map definiert ist und nicht Teil von Objekten ist, die aus Map erstellt wurden.