The Most Vexing Parse: Klärung eines verwirrenden Details
In der Programmierung bezieht sich der „Most Vexing Parse“ auf eine berüchtigte Mehrdeutigkeit in der C-Syntax Dies kann zu unerwarteten Funktionsdeklarationen führen. Ziel dieses Artikels ist es, einen solchen verwirrenden Aspekt des Most Vexing Parse aufzudecken.
Betrachten Sie die folgende Codezeile:
vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());
Wie kann diese Zeile als Funktionsdeklaration geparst werden?
Die Syntax verstehen
Normalerweise am meisten Ein ärgerliches Parse-Problem entsteht, wenn ein zweites temporäres Objekt als Funktion interpretiert wird, die einen Iterator zurückgibt und keine Argumente akzeptiert. In diesem Fall ist es jedoch das erste temporäre Objekt, istream_iterator
Das erste temporäre Objekt, istream_iterator
Die Interpretation
Der Compiler interpretiert istream_iterator
Daher wird die Codezeile als Funktionsdeklaration mit einem Parameter, cin, interpretiert, der vom Typ istream_iterator
Beliebige Klammern in Argumentlisten
Die Klammern um cin in istream_iterator
Fazit
Der Schlüssel zum Verständnis dieses Falles liegt darin, zu erkennen, dass das Überflüssige ist Klammern ändern nichts an der Bedeutung der Aussage. Die Interpretation von istream_iterator
Das obige ist der detaillierte Inhalt vonWie kann „vector v(istream_iterator(cin), istream_iterator());' als Funktionsdeklaration in C interpretiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!