Wieso pointer mit & aber referenzen einfach so?



  • Wieso gibts eigentlich für referenzen keinen operator?

    void a(int x) {
    }
    void b(int& x) {
    }
    void c(int* x) {
    }
    
    ...
    
    int y;
    a(y);
    b(y);
    c(&y);
    
    //Warum nicht
    b(§y) //oder sonst was?
    


  • & ist kein operator für referenzen?
    * ist kein zeiger?



  • Weil sonst einer der Vorteile von Referenzen verloren ginge. Das sie schöner zu handhaben sind als Pointer.

    grüße



  • David_pb schrieb:

    Weil sonst einer der Vorteile von Referenzen verloren ginge. Das sie schöner zu handhaben sind als Pointer.

    grüße

    😃 👍



  • sagsmal schrieb:

    Wieso gibts eigentlich für referenzen keinen operator?

    void a(int x) ...
    void b(int& x) ...
    //Warum nicht
    b(§y) //oder sonst was?
    

    Die Frage ist eher, warum nicht a(§y). Was passiert bei so einem Aufruf? Wir haben eine Variable y, also einen LValue vom Typ int vorliegen. Die Funktion a erfordert aber eine Wertübergabe. Es wird also der Inhalt der Variablen y ausgelesen (technisch: eine LValue-nach-RValue-Umwandlung durchgeführt) und an den Aktualparameter der Funktion a zugewiesen.

    Bei Funktion b wird diese Umwandlung nicht gemacht, weil die Referenz an den LValue y gebunden wird.

    Man könnte also mit Recht argumentieren, dass die implizite Umwandlung bei Wertübergabe explizit gemacht werden soll. Man tut es nicht, weil es unpraktisch wäre und weil es bei C schon so war usw.

    Funktion c macht auch nur eine Wertübergabe, diesmal des Pointers, da ist genauso wie bei a zu verfahren: c(§&y) 😉


Log in to reply