Heim > Backend-Entwicklung > C++ > Was hat es mit der Klammerung von Argumentnamen in der irritierendsten Analyse auf sich?

Was hat es mit der Klammerung von Argumentnamen in der irritierendsten Analyse auf sich?

DDD
Freigeben: 2024-12-14 19:10:12
Original
848 Leute haben es durchsucht

What's the Deal with Parenthesizing Argument Names in the Most Vexing Parse?

Die Mehrdeutigkeit im Most Vexing Parse verstehen: Argumentnamen in Klammern setzen

Der Most Vexing Parse bezieht sich auf eine grammatikalische Mehrdeutigkeit in C, die bei der Deklaration von Funktionen zu unerwarteten Ergebnissen führen kann . Ein verwirrendes Detail ist die Möglichkeit, bestimmte Zeilen als Funktionsdeklarationen zu analysieren, auch wenn sie scheinbar nicht der erwarteten Syntax entsprechen.

Betrachten Sie die folgende Zeile:

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

Diese Zeile kann aufgrund der Most Vexing Parse als Funktionsdeklaration interpretiert werden. Der erste temporäre Iterator, istream_iterator(cin), wird als Typ geparst, während der zweite temporäre Iterator, istream_iterator(), als Funktion interpretiert wird, die einen Iterator ohne Argumente zurückgibt.

Es ist jedoch nicht sofort klar, welchen Typ der erste temporäre Iterator darstellt. Der Schlüssel zum Verständnis liegt darin, zu erkennen, dass istream_iterator(cin) äquivalent zu istream_iterator ist. cin. Die Klammern sind überflüssig und haben keinen Einfluss auf die Bedeutung des Ausdrucks. Dies bedeutet, dass der erste temporäre Iterator ein istream_iterator vom Typ int mit dem Namen cin ist.

Dadurch stellt sich die Frage, ob es möglich ist, Argumentnamen in Funktionsaufrufen willkürlich in Klammern zu setzen. Die Antwort lautet: Ja, Sie können Argumentnamen in Klammern setzen, wenn Sie sie hervorheben oder ihren Zweck verdeutlichen möchten. Davon wird jedoch generell abgeraten, da es zu verwirrendem oder unerwartetem Code führen kann. Der Hauptzweck dieser Syntax besteht darin, eine von C geerbte Legacy-Syntax zu unterstützen und gilt im modernen C-Code nicht als bewährte Methode.

Das obige ist der detaillierte Inhalt vonWas hat es mit der Klammerung von Argumentnamen in der irritierendsten Analyse auf sich?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage