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>()());
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.
Im Gegensatz zu anfänglichen Annahmen ist istream_iterator< int>(cin) ist kein Funktionstyp. Es ist vielmehr dasselbe wie die alternative Syntax istream_iterator
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
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!