2014-12-01 4 views
15

fand ich diese seltsame Syntax:Wie wird eine Ganzzahl als "a = {1,}" kompiliert?

int a = {1,}; 

Und es funktioniert in allen Compiler habe ich versucht. Wie kompiliert es?

EDIT: Ich dachte, dass Skalarinitialisierer nur ein Element darin haben können, meine Frage hervorbringend. Ich bitte um Verzeihung für die ganzen Schwierigkeiten.

+3

Bitte tun Sie allen einen Gefallen und lassen Sie den Autor dieser Zeile nicht unbestraft davonkommen. Rufen Sie ihn/sie an den Wasserkühler, rollen Sie eine Zeitung auf, schlagen Sie ihn/sie und sagen Sie "Nein! Schlecht! Schlechter Programmierer!" – DanielKO

+0

@DanielKO Von welcher Linie? – user4309946

+1

Die Zeile, die Sie gepostet haben, 'int a = {1,};', Sie sagten, Sie hätten es gefunden. Es ist eine ironische Art zu sagen, bitte schreibe niemals Code wie diesen, es sei denn, du erstellst eine Einreichung für den IOCCC. – DanielKO

Antwort

15

Wie von Matt McNab in Kommentaren angegeben, ist die Syntax einer formatierten initialisierten Liste gleich, unabhängig davon, ob Sie sie zum Initialisieren eines Skalars oder eines anderen Objekts verwenden.

C++ 11 §5.17 Staaten

A verspannt-init-Liste auf der rechten Seite von

  • eine Zuordnung zu einem skalaren erscheinen können, in welchem ​​Fall die Initialisiererliste darf höchstens ein einziges Element haben.

Die Definition der verspannten-init-Liste (von §8.5):

braced-init-list: 
    { initializer-list ,opt } 
    { }

wo die 'opt' bedeutet, dass das Komma ist optional.

+0

N3337 ist ein Entwurf, kein ISO-Standard. –

+0

Ja, das weiß ich. Es ist aber die einzige, auf die ich Zugriff habe. Ich habe etwas aktualisiert, um das zu verdeutlichen. – harmic

+5

+++ 1 Große Antwort auf diese Frage nicht eine andere Frage. –

Verwandte Themen