Vielleicht bin ich nicht von diesem Planeten, aber es scheint mir, dass das Folgende ein Syntaxfehler sein sollte:
int a[] = {1,2,}; //extra comma in the end
Ist es aber nicht. Ich war überrascht, als dieser Code in Visual Studio kompiliert wurde, aber ich habe gelernt, dem MSVC-Compiler nicht zu trauen, was die C++-Regeln angeht, also habe ich den Standard überprüft, und er es auch nach der Norm zulässig. Wenn Sie mir nicht glauben, können Sie unter 8.5.1 die Grammatikregeln nachlesen.
Warum ist das erlaubt? Dies mag eine dumme, nutzlose Frage sein, aber ich möchte, dass Sie verstehen, warum ich frage. Wenn es sich um einen Unterfall einer allgemeinen Grammatikregel handeln würde, würde ich es verstehen - man hat beschlossen, die allgemeine Grammatik nicht noch schwieriger zu machen, nur um ein überflüssiges Komma am Ende einer Initialisierungsliste zu verbieten. Aber nein, das zusätzliche Komma ist ausdrücklich erlaubt. Zum Beispiel ist es nicht erlaubt, ein überflüssiges Komma am Ende der Argumentliste eines Funktionsaufrufs zu haben (wenn die Funktion ...
), was normal ist .
Noch einmal: Gibt es einen besonderen Grund für dieses überflüssige Komma? ausdrücklich erlaubt?