string erzeugen aus übergebenen Parametern
-
Hallo Leute...
sind folgende beiden Code-Zeilen identisch?
string param = string(argv[1]); //Alternative string param (argv[1]);Ich kann keinen Unterschied erkennen. Gibt es einen?
Gruß
-
Keinen praktischen.
-
Beim ersten wird zuerst der default-Constructor aufgerufen, dann die Zuweisung ausgeführt. Bei der Alternative wird das Objekt direkt mit dem Wert initialisiert, was effizienter ist.
-
Stefan schrieb:
was effizienter ist.
wobei das natürlich differenziert betrachtet werden muss. Entweder macht der Compiler aus Version 1 von selbst Version 2, spart sich also die Zuweisung, oder die bessere Effizienz ist allenfalls messbar, aber nicht spürbar.
Kurzum: mach, was dir besser gefällt. Du wirst so schnell nicht in die Situation kommen, wo das eine besser als das andere ist
-
Stefan schrieb:
Beim ersten wird zuerst der default-Constructor aufgerufen, dann die Zuweisung ausgeführt. Bei der Alternative wird das Objekt direkt mit dem Wert initialisiert, was effizienter ist.
Falsch.
Beim ersten wird zuerst ein Temporäres string-Objekt mit dem const-char*-Ctor erzeugt (der Ausdruck rechts vom Gleichheitszeichen), danach wird das benannte sting-Objekt (param) mit diesem temporären objekt per Copy-Ctor initialisiert. Ein default-Ctor ist nicht im Spiel, der op= auch nicht. Das ist eine andere Schreibweise fürstring param(string(argv[1]));Allerdings ist es laut Standard dem Compiler freigestellt, den Aufruf des Copy-Ctors wegzuoptimieren, in dem Fall sind beide Varianten identisch.
-
pumuckl schrieb:
Allerdings ist es laut Standard dem Compiler freigestellt, den Aufruf des Copy-Ctors wegzuoptimieren, in dem Fall sind beide Varianten identisch.
Sofern keine Nebeneffekte auftreten. Der Konstruktor/Copy-Konstruktor von string könnte ja theoretisch mitloggen, wie viele Instanzen erzeugt wurden. Dann könnte sich das Programm anderst verhalten je nachdem, ob optimiert wurde oder nicht.