2013-05-28 11 views
6

Czy istnieje różnica między 2 initailizations obiektu.C++ inicjalizacja obiektu i semantyka konstruktora

Object obj(constructor_arguments); 

lub

Object obj = Object(constructor_arguments); 

Należy zauważyć, że drugi inicjalizacja nie jest pomyślany jako wskaźnik z operatorem new. Ma on być zmienną niesadzoną.

W GCC zarówno kompilacji i pracy dobrze i zastanawiam się, czy rzeczywiście istnieje jakakolwiek różnica lub jeśli oba stwierdzenia są semantycznie takie same.

+1

Najlepszym sposobem sprawdzenia rzeczywistej różnicy jest sprawdzenie wygenerowanego kodu zespołu. Pierwsza inicjalizacja jest lepsza, ale druga wersja jest prawdopodobnie zoptymalizowana pod kątem tej samej rzeczy, jeśli pozwolisz kompilatorowi wykonać swoją magię. –

+1

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

+0

@MarcClaesen oznacza, że ​​patrzenie na wygenerowany kod isn najlepszy sposób. W rzeczywistości jest to najgorszy sposób (w tym przypadku), ponieważ może prowadzić do fałszywych wniosków. –

Odpowiedz

11

Tak, jest. Pierwsza to składnia do bezpośredniej inicjalizacji, druga to inicjalizacja kopii.

Teoretycznie drugi wywołuje konstruktora kopiowania, ale podlega on optymalizacji.

Powiązane problemy