Frage zu return(int x,int y);



  • Hallo, ich habe letzdens ein Quelltext gesehen wo am Ende einer Funktion stand:

    return ( x,y );

    Aber man kann doch immer nur 1 Wert zurückgeben oder ?
    Hier wird mir z.b. immer der Wert von y ausgeben.

    Was spielt das x hier für eine Rolle ?

    #include <iostream>
    using namespace std;
    
    int f ( int,int);
    
    int main()
    {
    int r;
    int x = 2;
    int y = 8;
    
    r= f ( x,y);
    
      cout<<r<<endl;
    
    system("PAUSE");
    }
    //---------------------------------------------------------------------------
    
    int f ( int x , int y )
    {
    return (x,y);
    }
    


  • funktion1 schrieb:

    Was spielt das x hier für eine Rolle ?

    In diesem Fall garkeine. Das , ist hier der Komma-Operator. Der sorgt dafür, dass beide Ausdrücke ausgewertet werden, das Ergebnis ist aber das Ergebnis des zweiten Ausdrucks. Sinn macht der Komma-Operator nur, wenn der erste Ausdruck irgendwelche Nebenwirkungen hat. Anwenden sollte man ihn allerdings auch nur dann, wenn man nicht statt des Komma-Operators zwei Anweisungen schreiben kann. Alles andere ist schlechter Stil.
    Man kann den Komma-Operator überladen, dann hat er eine andere Funktion, allerdings geht das wie immer nur für eigene Typen, und man sollte vorsichtig damit sein, weil es trotzdem noch sehr ungewohnt aussieht.



  • Ja, man kann nur einen Wert zurückgeben. Der , Operator gibt das letzte Element, in diesem Fall y zurück.



  • Ist in der Tat kein guter Stil und unübersichtlich dazu!

    Soll eine Funktion ggfs. verschiedene Werte zurückgeben können, macht man das z.B. mit einer Variable

    int rtn = 0;
    ...
    rtn = x;
    ...
    rtn = y;
    ...
    return rtn;
    


  • funktion1 schrieb:

    ich habe letzdens ein Quelltext gesehen wo am Ende einer Funktion stand:
    return ( x,y );

    Entweder erinnerst Du Dich falsch und da stand noch irgend etwas vor der öffnenden Klammer

    return dings(x,y);
    

    (zB ein anderer Funktionsaufruf/Konstruktoraufruf)
    und/oder Du hast Dir Quellcode von jemandem angeguckt, der keine Ahnung hat.

    Ja, man kann nur eine Sache zurückgeben. Diese eine Sache kann aber ein Objekt einer benutzerdefinierten Klasse sein, z.B.

    typedef std::pair<int,int> dings;
    

Anmelden zum Antworten