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ür

    string 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.


Anmelden zum Antworten