Il primo è probabilmente legale. Gli altri due non sono certamente (§7.1.6.4/1): "Lo specifier del tipo auto indica che il tipo di una variabile dichiarata deve essere dedotto dal suo inizializzatore o che un dichiaratore di funzione deve includere un trailing-return -genere."
Dico probabilmente per il primo, perché §3.1.1 non è veramente chiaro in che misura deve corrispondere la definizione. Non è necessaria una corrispondenza testuale al 100% , anche se questo è ciò che un'interpretazione letterale di implica: nel testo, il corpo di main
è dato come /* ... */
, che non è molto utile, e certamente non richiesto. Allo stesso modo, la tradizione ha permesso anche qualsiasi nome per argc
e argv
e dichiarando argv
come char** argv
. Non c'è tradizione nella definizione di main con un tipo di ritorno finale , tuttavia. Penso che ciò che si intendeva nel §3.6.1 sia che tutte le definizioni di main
che hanno la stessa firma siano consentite, ma questo non è ciò che dicono le parole effettive.
Indipendentemente da ciò: perché si vorrebbe tale offuscamento? C/C++ non è Pascal e ciò che è naturale in una lingua (come il trailing tipi di ritorno per le funzioni) è l'offuscamento in un'altra.
EDIT:
Ho appena scaricato un progetto più recente (N3797), e sembra come la formulazione è cambiato (ed è ora contraddittorio).Il primo paragrafo del dice ancora fondamentalmente la stessa cosa (ma include un termine aggiuntivo per lambda): lo auto
è sostituito "sia dalla deduzione da un inizializzatore o dalla specifica esplicita con un tipo di ritorno finale". (E naturalmente, le funzioni non hanno inizializzatori, quindi può essere applicato solo il tipo di trailing-return .) I paragrafi successivi, tuttavia, parlano di detrazione dal tipo restituito, anche se il primo paragrafo richiede il trattino finale tipo di ritorno (e quindi rende superflua la deduzione).
fonte
2014-10-20 17:06:56
L'ultimo non è legale come 'auto' deduce il tipo restituito come' void'. Vedi http://stackoverflow.com/questions/17134975/will-automatic-return-type-deduction-work-for-main – 0x499602D2
@ 0x499602D2 La seconda citazione non implica che il tipo di ritorno debba essere dedotto come 'int' per caso 3? –
@TristanBrindle La risposta nel collegamento lo spiega. – 0x499602D2