Ich habe ein kleines Stück Code mit einer Aussage void();
Was ist 1 void()
genau?
Was macht 1 void()
anders als 2 void;
?
Ich habe schon gelesen:
Aber ich bin neugierig, wenn die lose Aussage void (); unterscheidet sich von einem (und warum natürlich)
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:
type-id
. 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?
Tags und Links c++ language-lawyer