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.
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ę. –
Możliwy duplikat http://stackoverflow.com/questions/1051379/is-there-a-difference-in-c-between-copy-initialization-and-direct-initializati – syam
@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. –