Wie wird der return wert übegeben?



  • Hoi,

    ich habe da mal ne Frage.
    wir haben folgende Funktion.

    FOO foo(void)
    {
        FOO result;
        result=1337;
    
        return result;    
    }
    

    FOO ist einfah irgeneine Klasse.

    FOO klasse1;
    klasse1=foo(); //irgendwo hier wird jetzt der Copy Constructor aufgerufen, aber             
                   //wo und warum ??
    

    Daraus ergibt sich meine zweite Frage.
    Wo wird der return Wert hingepackt?

    In der Funktion kann er nicht stehen bleiben, da die ja alles wieder freigibt, was sich benutzt hat.
    Das heißt in disem Fall wird result nochmal woanders hinkopiert und erst dann klasse1 zugewiesen.

    Aber wohin??

    mfg



  • Beim return result; wird der Inhalt von 'result' in eine temporäre Variable kopiert, die das Ende der Funktion überleben darf - danach wird 'result' entsorgt. Beim klasse1=foo(); wird der Inhalt dieser temporären Variable in 'klasse1' kopiert (mittels operator=) - und am Ende der Anweisung wird auch die temporäre Variable wieder entsorgt.

    (wobei der Compiler berechtigt ist, das ganze Verfahren zu optimieren)



  • Die geläufigste Optimierung macht daraus etwa diesen code

    Ohne Optimierung:

    FOO foo(void)
    {
        FOO result;
        result=1337;
    
        return result;    
    } 
    
    {...
    FOO klasse1 = foo(); 
    ...}
    

    Mit Optimierung wird daraus:

    void foo(FOO& ret)
    {
    ret = 1337;
    
    }
    {...
    FOO klasse1;
    foo(klasse1); 
    ...}
    

    Wenn man den orginalcode mit Optimierung mit VS 8.0 übersetzt
    Hat man genau einen Konstruktor und einen Destruktoraufruf
    ohne Optimierung hat man eine Konstruktor einen CopyKonstruktor und zwei Destruktor aufrufe



  • templäd schrieb:

    Wenn man den orginalcode mit Optimierung mit VS 8.0 übersetzt
    Hat man genau einen Konstruktor und einen Destruktoraufruf
    ohne Optimierung hat man eine Konstruktor einen CopyKonstruktor und zwei Destruktor aufrufe

    Mit VS 8 kann man den Code optimieren? wie?



  • Das passiert automatisch, da wird noch viel mehr optimiert beim compilieren 😉



  • achso ich dachte man kann den quellcode selber richtig rum optimieren, wenn der anwender umständlich geschrieben hat. sowas wie auflösen


Anmelden zum Antworten