2013-05-28 16 views
6

Bir nesnenin 2 initailizasyonu arasında fark var mı. ikinci başlatma new operatörü ile bir gösterici olması amaçlanmamıştır olduğuC++ nesne başlatma ve yapıcı semantiği

Object obj(constructor_arguments); 

veya

Object obj = Object(constructor_arguments); 

not edin. Öbek olmayan bir değişken olması amaçlanmıştır.

GCC'de hem derleme hem de iyi çalışır ve gerçekten bir fark olup olmadığını veya her iki ifadenin de anlamsal olarak aynı olup olmadığını merak ediyorum.

+1

Gerçek bir fark olup olmadığını görmenin en iyi yolu, oluşturulan montaj kodunu kontrol etmektir. İlk başlatma daha iyidir, ancak derleyicinin sihrini yapmasına izin verirseniz, ikinci sürüm muhtemelen aynı şey için optimize edilir. –

+1

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

+0

@MarcClaesen'in olası kopyasının, oluşturulan koda bakılması anlamına gelir. en iyi yol. Aslında, bu yanlış sonuçlara yol açabileceğinden en kötü yoldur (bu durumda). –

cevap

11

Evet var. Birincisi doğrudan başlatma için sözdizimi, ikincisi kopya başlatmadır.

Teorik olarak ikincisi kopyalama kurucusunu çağırır, ancak bu optimizasyonlara tabidir.