Heim > Backend-Entwicklung > C++ > Warum wird „vector v(istream_iterator(cin), istream_iterator()());' als Funktionsdeklaration analysiert?

Warum wird „vector v(istream_iterator(cin), istream_iterator()());' als Funktionsdeklaration analysiert?

Barbara Streisand
Freigeben: 2024-12-21 02:49:08
Original
733 Leute haben es durchsucht

Why Does `vector v(istream_iterator(cin), istream_iterator()());` Parse as a Function Declaration?

Enträtseln eines rätselhaften Aspekts des Most Vexing Parse

Der Most Vexing Parse ist eine berüchtigte Compiler-Eigenart, die zu unerwarteten Interpretationen von Code führen kann. Ein verwirrender Fall entsteht, wenn eine Zeile, die einer Funktionsdeklaration ähnelt, tatsächlich eine andere Konstruktion darstellt.

Betrachten Sie die folgende Zeile:

vector<int> v(istream_iterator<int>(cin), istream_iterator<int>()());
Nach dem Login kopieren

Verwirrenderweise kann diese Zeile als Funktionsdeklaration geparst werden. Während der zweite temporäre Iterator logisch als Typ interpretiert werden kann, ist die Rolle des ersten temporären Iterators weniger klar.

Klarstellung der Natur des ersten temporären Iterators

Im Gegensatz zu anfänglichen Annahmen ist istream_iterator< int>(cin) ist kein Funktionstyp. Es ist vielmehr dasselbe wie die alternative Syntax istream_iterator cin.

In C gibt es eine ähnliche Deklaratorsyntax, bei der der Name eines Arguments willkürlich in Klammern gesetzt werden kann. Obwohl von dieser Praxis im Allgemeinen als „Fehler“ abgeraten wird, wird sie in C aufgrund ihrer Altlast immer noch unterstützt.

Daher deklariert istream_iterator(cin) einen Parameter vom Typ istream_iterator namens cin. Durch die Bereitstellung von Klammern um den Argumentnamen trennt die Syntax effektiv den Parameternamen von der Typspezifikation.

Das obige ist der detaillierte Inhalt vonWarum wird „vector v(istream_iterator(cin), istream_iterator()());' als Funktionsdeklaration analysiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage