Ja, für eingebaute Typen int x = 1;
und int x(1);
sind die gleichen.
Beim Erstellen von Objekten des Klassentyps unterscheiden sich die beiden verschiedenen Initialisierungssyntaxen geringfügig.
Obj x(y);
Dies ist direkte Initialisierung und weist den Compiler für eine eindeutige Konstruktor zu suchen, die y
nimmt, oder etwas, das y
kann implizit konvertiert werden, und verwendet diesen Konstruktor x zu initialisieren.
Obj x = y;
Dies ist Kopie Initialisierung und weist den Compiler eine temporäre Obj
durch Umwandlung y
und verwendet Obj
‚s Copykonstruktor erstellen x
zu initialisieren.
Copy initialisiert entspricht direkte Initialisierung wenn die Art des y
gleich wie die Art der x
ist.
Für Kopie Initialisierung, da das temporäre verwendet das Ergebnis einer impliziten Konvertierung ist, Konstruktoren markiert explicit
werden nicht berücksichtigt. Der Kopierkonstruktor für den konstruierten Typ muss zugänglich sein, aber die Kopie selbst kann vom Compiler als Optimierung eliminiert werden.
Dupe: http://stackoverflow.com/questions/1051379/is-there-a-difference-in-c-between-copy-initialization-and-assignment-initializ –
Nicht ganz das Gleiche. Diese Frage scheint sich speziell auf die Initialisierung von PODs zu beziehen. – Boojum