Gibt es einen Unterschied zwischen...
-
...einer Initialisierung bei der Deklaration einer Variable mit
int irgendwas(20);
gegenüber
int irgendwas = 20;oder meinetwegen auch mit Objekten
objekt irgendwas(irgendwasanderes);
und
objekt irgendwas = objekt(irgendwasanderes);
?
-
Also bei eingebauten Typen spielt es keine Rolle.
Bei anderen Objekten muss jedoch der Konstruktor so 2 mal aufgerufen werden + noch kopiert werden.
-
Normalerweise müsste wie drakon schon sagt, das Objekt erst konstruiert und dann mittels des Copy-Konstruktors kopiert werden, wenn man
MyType blub = MyType(15);schreibt. Allerdings dürfen die Compiler das wegoptimieren (auch wenn dadurch Nebeneffekte, wie Ausgaben oder ähnliches verloren gehen) und jeder halbwegs vernünftige Compiler tut das auch.
Felix
-
drakon schrieb:
Also bei eingebauten Typen spielt es keine Rolle.
Bei anderen Objekten muss jedoch der Konstruktor so 2 mal aufgerufen werden + noch kopiert werden.
Falsch.
-
Phoemuex schrieb:
schreibt. Allerdings dürfen die Compiler das wegoptimieren (auch wenn dadurch Nebeneffekte, wie Ausgaben oder ähnliches verloren gehen) und jeder halbwegs vernünftige Compiler tut das auch.
nicht zu vergessen, dass compiler das nur dürfen, wenn der code auch legal wäre, wenn sie es nicht täten (sprich: der copy-ctor muss zugänglich und darf nicht private sein, auch wenn er in der regel gar nicht verwendet wird).
das ganze nennt sich übrigens copy-initialization.
-
Und dazu sieht int narf(10); auch noch doof aus.
-
Du kannst Dir den Artikel/Aufgabe von Sutter mal dazu durchlesen:
http://www.gotw.ca/gotw/001.htm
-
explicit auch angucken
