Wie ruft diese Deklaration das Most Vexing Parse auf?

8

Betrachten Sie das folgende Programm:

%Vor%

Clang im C ++ 1y-Modus geht davon aus, dass der MVP so aufgerufen wird, dass a als Funktionsdeklaration analysiert wird / a>:

%Vor%

Ich verstehe den MVP, aber nicht in diesem Fall: argv[1] ist eindeutig ein Ausdruck, und davor gibt es keinen Typ. Wie also könnte diese Zeile als Funktionsdeklaration analysiert werden?

Stimmt die semantische Interpretation von argv[1] , die die Zeile als Objektdeklaration disambiguieren würde, erst ab, nachdem der Compiler die Zeile bereits als Funktionsdeklaration analysiert hat? Oder ist es ein Clang Bug? Oder ist es vollkommen normal durch eine Interpretation der Token argv [ 1 ] , die ich vermisse?

    
Lightness Races in Orbit 07.02.2014, 10:12
quelle

2 Antworten

12

Ich denke, es wird als

geparst %Vor%

d. eine Funktion, die ein Array von 1 std::fstream akzeptiert, wobei die zusätzlichen Klammern überflüssig sind.

Natürlich ist dieser Array-Parameter in Wirklichkeit ein Pointer, weshalb Sie mit semantisch enden müssen:

%Vor%     
Mehrdad 07.02.2014, 10:14
quelle
3

Die Parens sind überflüssig. Alle folgenden sind die Deklarationen:

%Vor%

so sind diese:

%Vor%

So ist das:

%Vor%

ist das gleiche wie:

%Vor%

ist das gleiche wie:

%Vor%

Ich hoffe, das hilft.

    
Nawaz 07.02.2014 10:16
quelle

Tags und Links