2013-05-28 3 views
6

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.

+1

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. –

+1

Possibile duplicato di http://stackoverflow.com/questions/1051379/is-there-a-difference-in-c-between-copy-initialization-and-direct-initializati – syam

+0

@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. –

risposta

11

Sì, c'è. La prima è la sintassi per l'inizializzazione diretta, la seconda è l'inizializzazione della copia.

In teoria, il secondo chiama il costruttore di copie, ma questo è soggetto a ottimizzazioni.