Heim >Backend-Entwicklung >C++ >Warum deklariert „vector v(istream_iterator(cin), istream_iterator());' eine Funktion in C?
Der verblüffende Fall temporärer Iteratoren im Most Vexing Parse
Der Most Vexing Parse, eine berüchtigte Parsing-Mehrdeutigkeit in C, wirft ein verwirrendes Bild auf Frage: Wie kann die folgende Zeile als Funktion interpretiert werden? Erklärung?
vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());
Um dieses eigenartige Verhalten zu verstehen, müssen wir uns mit den Details der Most Vexing Parse befassen. Der zweite temporäre Iterator kann tatsächlich als Typ aufgefasst werden, nämlich als Funktion, die einen Iterator ohne Parameter liefert. Der Knackpunkt liegt jedoch darin, die Interpretation des ersten temporären Iterators zu verstehen.
Im Gegensatz zum zweiten Iterator erscheint der erste temporäre Iterator verwirrenderweise in Klammern eingeschlossen und es fehlt ihm ein expliziter Parametername. Diese unkonventionelle Syntax, ein Erbe von C, löst die Frage aus: Welchen Typ stellt dieser Iterator dar?
Die Antwort ist, dass istream_iterator
Letztendlich ergibt sich die verwirrende Natur dieses Codes aus seiner Abhängigkeit von dieser veralteten Syntax. Es deklariert, dass der erste Parameter ein istream_iterator
Das obige ist der detaillierte Inhalt vonWarum deklariert „vector v(istream_iterator(cin), istream_iterator());' eine Funktion in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!