Puoi lasciare g++
si avvertono di questo caso l'uso con -Winit-self
(in collaborazione con -Wuninitialized
), e se si trattano gli avvisi come errori, si deve soddisfare il vostro prurito.
Questa tecnica di utilizzo del costruttore di copie per l'inizializzazione automatica viene talvolta utilizzata per sopprimere il costruttore/inizializzatore predefinito di un oggetto globale dall'esecuzione. Questo può essere necessario se il costruttore predefinito dell'oggetto globale è solo per 0
inizializzare l'oggetto, ma l'oggetto è stato utilizzato prima che il costruttore sarebbe stato eseguito. Come ritorno alla C, le cifre globali sono 0
inizializzate all'avvio del programma, quindi il runtime C++ inizia a eseguire i costruttori globali. Per quei casi stretti in cui il costruttore definito che avrebbe eseguito è solo a 0
dall'oggetto, l'inizializzazione automatica non arreca alcun danno.
Nel caso generale, l'auto-inizializzazione del costruttore di copie è una cattiva pratica, poiché generalmente causerebbe lo stesso tipo di problemi che l'uso di una variabile non inizializzata causerebbe (ovvero, un comportamento non definito). Nell'esempio particolare nella domanda dell'OP,è locale a main
ed è quindi non inizializzato. Il risultato della lettura di una variabile non inizializzata è sempre un comportamento indefinito.
Per me non è illegale, è solo un abuso di notazione. –
Valuta come (i) 'int i' (ii)' i = i' nell'ordine –
Penso per lo stesso motivo per cui solo "int i;" senza mai assegnare "i" è legale. – asmeurer