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)