Anders verhält es sich in folgendem Beispiel, eine Funktion, die eine Integerzahl als Binärzahl ausgibt (dies allerdings rückwärts, d.h. mit dem niedrigsten Bit zuerst):
void binaer(unsigned int a) { while (a) { cout<< a%2; // Rest modulo 2 a>>=1; // Eine Stelle nach rechts schieben } }
Hier wird a
innerhalb des Funktionsrumpfes solange
halbiert, bis es Null erreicht hat. Würde hier ein
Referenzparameter übergeben, so würde jede Variable, die
man an diese Funktion übergibt auf Null gesetzt - ein sicherlich
unerwünschter Nebeneffekt. Außerdem wäre der Aufruf
mit Konstanten nicht möglich, da auch eine Übergabe als
konstante Referenz nicht möglich wäre, da a
ja
verändert wird.
Die einzige Lösung, um diese Funktion mit einer Referenzübergabe zu implementieren wäre es, eine lokale Kopie des Parameters zu erzeugen, aber dann kann man sich den Umweg über die Referenzübergabe sparen und gleich eine Wertübergabe nutzen.