Parameteruebergabe: Frage



  • nur so aus neugier:

    wenn eine Funktion so aussieht:

    std::string& foo (std::string& bla)
    {
        // ....
        return bla;
    }
    

    und so aufgerufen wird:

    foo("ich bin ein c-string");
    

    dann wird auf dem Stack ein temporaerer String konstruriert, oder? Aber was wird dann zurueckgeliefert? nur irgendwelcher Speicher-Muell? Gar Nix?

    Und wenn dem so ist: kann man das irgendwie umgehen?

    [ Dieser Beitrag wurde am 30.06.2003 um 23:59 Uhr von Blue-Tiger editiert. ]



  • Hallo,
    die Frage erübrigt sich, da in Standard-C++ der Aufruf:
    foo("ich bin ein c-string");

    nicht erlaubt ist, da foos Parameter eine Referenz auf ein nicht-konstanten String ist und an eine solche Referenz kein rvalue gebunden werden kann.

    [ Dieser Beitrag wurde am 01.07.2003 um 07:59 Uhr von HumeSikkins editiert. ]



  • Wieso auf dem Stack ? Ich dachte eigentlich std::string reserviert Speicher dynamisch ? 😕



  • die funktion erwartet eine refferenz auf einen string und nicht einen string



  • Original erstellt von HumeSikkins:
    **
    nicht erlaubt ist, da foos Parameter eine Referenz auf ein nicht-konstanten String ist und an eine solche Referenz kein rvalue gebunden werden kann.
    **

    und wenns ein konstanter String waere, wuerds gehen?

    BTW: und was, wenn die Funktion so aussaehe:

    std::string& foo (std::string bla) // keine Referenz mehr
    {
    // ....
    return bla;
    }



  • und wenns ein konstanter String waere, wuerds gehen?

    Nö. Vorallem wie erzeugt man ein konstantes temporäres Objekt? Was du brauchst ist ein lvalue. Nur solche können an eine solche Referenz gebunden werden.

    BTW: und was, wenn die Funktion so aussaehe:

    std::string& foo (std::string bla) // keine Referenz mehr
    {
    // ....
    return bla;
    }

    Tod und Verderben. Du gibst eine Referenz auf ein lokales Objekt zurück. Endet die Funktion, endet das Leben von bla und die Referenz referenziert einen Zombie.


Anmelden zum Antworten