C'è una differenza tra le 2 inazioni di un oggetto.semantica degli oggetti C++ e semantica del costruttore
Object obj(constructor_arguments);
o
Object obj = Object(constructor_arguments);
nota che la seconda inizializzazione non è destinato ad essere un puntatore con l'operatore new
. È destinato a essere una variabile non heap.
In GCC entrambi compilano e funzionano bene e mi chiedo se ci sia effettivamente qualche differenza o se entrambe le affermazioni sono semanticamente uguali.
Il modo migliore per verificare se esiste una differenza effettiva consiste nel controllare il codice assembly generato. La prima inizializzazione è migliore, ma la seconda versione è probabilmente ottimizzata per la stessa cosa se si lascia che il compilatore faccia la sua magia. –
Possibile duplicato di http://stackoverflow.com/questions/1051379/is-there-a-difference-in-c-between-copy-initialization-and-direct-initializati – syam
@MarcClaesen che significa guardare il codice generato isn è il modo migliore In realtà, è il modo peggiore (in questo caso), in quanto può portare a conclusioni false. –