Verständnisproblem. Was soll das bezwecken?



  • Huhu Community,
    Nun komme ich mit einem anderen Problem zu euch. 😃
    Ich lese mir zur Zeit ein C++ Tutorial durch, dort geht es gerade um Referenzen. Der Autor bringt diesen Quelltext ein:

    #include<iostream>
        using namespace std;
    
        void tausche(int&, int&); //wie gehabt int& ist eine referenz
    
        int main()
        {
          int a=2;
          int b=5;
          cout<<"a = "<<a<<"\nb = "<<b<<"\n";
          tausche(a,b);
          cout<<"a = "<<a<<"\nb = "<<b<<"\n";
        }
    
        void tausche(int& a, int& b)
        {
          int temp=a;
          a=b;
          b=temp;
        }
    

    Mir ist klar was das bezwecken soll. Es soll die Variablen a und b mittels Referenzen tauschen. Doch verstehe ich den sogenannten "Dreieckstausch" unten nicht:

    void tausche(int& a, int& b)
        {
          int temp=a;
          a=b;
          b=temp;
        }
    

    Meiner Meinung nach wird dort nur die Referenz a auf temp referenziert und dann der Wert der Referenz a auf b geschoben. Dann ist die Zeile b=temp doch überflüssig, da b schon den Wert der Referenz von a hat, oder?
    Das Programm funktioniert zwar, doch ich verstehe es nicht 😃



  • Referenzen können nicht umgeschoben oder verändert werden. Wenn man nach der Initialisierung auf die Referenz zugreift oder ihr einen Wert zuweist, spricht man immer das referenzierte Objekt an.

    Der Dreieckstausch ist notwendig, da du nicht gleichzeit ein Objekt einem anderen und das andere dem einen zuweisen kannst. Sobald du nämlich eine Zuweisung gemacht hast, haben beide Objekte den selben Wert.



  • Okay, danke dir 🙂


Log in to reply