Ist eine Aussage void (); legal und was ist das eigentlich?

8

Ich habe ein kleines Stück Code mit einer Aussage void();

%Vor%

Was ist 1 void() genau?

  • Eine anonyme Funktionsdeklaration?
  • Eine Typdeklaration?
  • Ein leerer Ausdruck?

Was macht 1 void() anders als 2 void; ?

Ich habe schon gelesen:

  1. Ist sizeof (void ()) ein zulässiger Ausdruck? , aber da void () als Typ in der Größe von
  2. betrachtet wird
  3. Was bedeutet void () in declltype (void ()) genau? wo es in declspec berücksichtigt wird.
  4. Und ich lese Ist void {} legal oder nicht?

Aber ich bin neugierig, wenn die lose Aussage void (); unterscheidet sich von einem (und warum natürlich)

    
André 29.03.2017, 14:33
quelle

2 Antworten

4

void; ist ein Fehler, da es in der Sprachgrammatik keine Regel gibt, die mit diesem Code übereinstimmt. Insbesondere gibt es keine Regel type-id ; ,

Der Code void() stimmt jedoch mit zwei Grammatikregeln überein:

  1. type-id .
  2. postfix-expression , wobei der Unterfall simple-type-specifier ( expression-list-opt ) ist.

Jetzt muss der Parser void(); einer Grammatikregel zuordnen. Auch wenn void() mit type-id übereinstimmt, gibt es, wie bereits erwähnt, keine Regel, die type-id ; entspricht. Daher lehnt der Parser das mögliche Parsen von void() als type-id in diesem Kontext ab und versucht die andere Möglichkeit.

There ist eine Reihe von Regeln, die definieren, dass postfix-expression ; eine Anweisung macht. So wird void() in diesem Kontext eindeutig als postfix-expression geparst.

Wie in den anderen Antworten bereits beschrieben, ist die semantische Bedeutung dieses Codes als postfix-expression ein Pr-Wert vom Typ void .

Verwandter Link: Ist sizeof(int()) ein legaler Ausdruck?

    
M.M 29.03.2017 20:24
quelle
0

A void Ausdruck.

Der Compiler erstellt keinen Code dafür, z. B.

in VS

%Vor%

erzeugt diese Baugruppe:

%Vor%     
peedurrr 29.03.2017 15:24
quelle

Tags und Links