Tak, dla typów wbudowanych int x = 1;
i int x(1);
są takie same.
Podczas konstruowania obiektów typu klasy, dwie różne składnie inicjalizacyjne są nieco różne.
Obj x(y);
To bezpośredni inicjalizacji i instruuje kompilator wyszukiwania dla jednoznacznego konstruktora który zabierze y
, lub coś, co y
można niejawnie konwertowane do i używa tego konstruktora do inicjalizacji x.
Obj x = y;
to kopii inicjalizacji i instruuje kompilator utworzenie tymczasowego Obj
przez przekształcenie y
i wykorzystuje Obj
jest kopia konstruktora initalize x
.
Kopiowanie initalization jest równoważna bezpośredniego inicjalizacji gdy typ y
jest taki sam jak typ x
.
Dla inicjuje kopiowanie, ponieważ tymczasowy użytek jest wynikiem niejawnej konwersji, konstruktorzy oznaczeni explicit
nie są brani pod uwagę. Konstruktor kopiowania dla skonstruowanego typu musi być dostępny, ale sama kopia może zostać usunięta przez kompilator jako optmizacja.
Dupe: http://stackoverflow.com/questions/1051379/is-there-a-difference-in-c-between-copy-initialization-and-assignment-initializ –
Nie całkiem to samo. To pytanie wydaje się szczególnie dotyczyć inicjowania POD. – Boojum