Heim >Backend-Entwicklung >C++ >Warum deklariert „vector v(istream_iterator(cin), istream_iterator());' eine Funktion in C?

Warum deklariert „vector v(istream_iterator(cin), istream_iterator());' eine Funktion in C?

Susan Sarandon
Susan SarandonOriginal
2024-12-23 14:54:24429Durchsuche

Why Does `vector v(istream_iterator(cin), istream_iterator());` Declare a Function 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(cin) im Wesentlichen äquivalent zu istream_iterator ist. cin. Die Klammern erfüllen keinen sinnvollen Zweck und sind lediglich überflüssig. Diese merkwürdige Syntax ermöglicht es Ihnen, Argumentnamen in Funktionsdeklarationen willkürlich in Klammern zu setzen.

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 ist. namens cin. Dieses unerwartete Verhalten unterstreicht die Nachteile solcher syntaktischer Relikte, die möglicherweise zu Verwirrung und Mehrdeutigkeit im Code führen.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn