Mit unserem aktuellen Wissen ist es etwas umständlich, eine Variable mithilfe einer Funktion zu aktualisieren. Jedes Argument einer Funktion wird wie eine Kopie behandelt und ändert den ursprünglichen Wert nicht. Je nach Größe deines Typs kann das ernste Folgen für die Performance deines Codes haben.
int adjust_salary(int base, int kids) {
return base + kids * 500;
}
int now_a_mother_of_twins{2500};
adjust_salary(now_a_mother_of_twins, 2);
// now_a_mother_of_twins is still 2500
now_a_mother_of_twins = adjust_salary(now_a_mother_of_twins, 2);
// now_a_mother_of_twins is now 3500
References kann man sich als Aliase vorstellen: Änderungen daran wirken sich auf die ursprüngliche Variable aus.
References verwenden ein kaufmännisches Und (&) in der Typdeklaration.
int balance{1000};
int& budget{balance};
int pro_computer_wheels{699};
budget -= pro_computer_wheels;
// budget is now 301;
// balance is also 301;
Neu binden (also das Ändern der Bindung einer reference) ist nicht möglich.
Du kannst keine uninitialisierte reference haben.
References müssen mit einer bestehenden Variable initialisiert werden.
int main_acc{1'000'000};
int side_acc{-20};
int& savings{main_acc};
// => main_acc and savings are 1'000'000
// try to reseat savings to use main account
savings = side_acc;
// savings and main_acc are now -20
// as this uses the **value** of side_acc
savings += 20;
// savings and main_acc are now 0, side_acc is stil -20
int& future_budget;
// => compiler error, reference must be bound!
voidDank der references brauchst du vielleicht gar keinen Wert aus einer Funktion zurückzugeben.
In diesem Fall wird void als Rückgabetyp verwendet.
void increase_power(int& level) {
level += 500;
}
int goku{8700};
increase_power(goku);
// goku's power level?
// It's over 9000!