2014-12-01 2 views
15

ho trovato questo strano sintassi:Come si compila l'inizializzazione di un intero come "a = {1,}"?

int a = {1,}; 

e funziona in tutti i compilatori che ho provato. Come si compila?

EDIT: Ho pensato che gli inizializzatori scalari possono avere solo un elemento in esso, generando la mia domanda. Scusa per tutti i problemi.

+3

Si prega di fare un favore a tutti, e non lasciare che l'autore di quella linea torni impunito. Chiamalo al refrigeratore d'acqua, arrotoli un giornale, colpiscilo e digli "No! Cattivo! Cattivo programmatore!" – DanielKO

+0

@DanielKO Di quale linea? – user4309946

+1

La riga che hai postato, 'int a = {1,};', hai detto di averlo trovato. È un modo ironico per dire, per favore, non scrivere mai un codice come questo, a meno che tu non stia creando una sottomissione per l'IOCCC. – DanielKO

risposta

15

Come affermato da Matt McNab nei commenti, la sintassi di una lista inizializzata rinforzata è la stessa indipendentemente dal fatto che la si utilizzi per inizializzare uno scalare o qualsiasi altra cosa.

C++ 11 §5.17 stati

A rinforzato-init-elenco visualizzato sul lato destro della

  • un'assegnazione ad uno scalare, nel qual caso la lista di inizializzazione deve avere al massimo un singolo elemento.

La definizione di rinforzato-init-lista è (da §8.5):

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

dove il 'opt' significa che la virgola finale è opzionale.

+0

N3337 è una bozza, non uno standard ISO. –

+0

Sì, lo so. È l'unico a cui ho accesso, comunque. Ho aggiornato un po 'per chiarirlo. – harmic

+5

+++ 1 Ottima risposta a questa domanda non un'altra domanda. –