Con los conocimientos que tenemos ahora, actualizar una variable con la ayuda de una función resulta un poco engorroso. Cada argumento de una función se trata como una copia y no modifica el valor original. Dependiendo del tamaño de tu tipo, esto puede tener consecuencias graves para el rendimiento de tu código.
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
Las References se pueden ver como alias: los cambios que se hagan en ellas afectan a la variable original.
Las References usan un ampersand (&) en la declaración del tipo.
int balance{1000};
int& budget{balance};
int pro_computer_wheels{699};
budget -= pro_computer_wheels;
// budget is now 301;
// balance is also 301;
Reasignar (cambiar el vínculo de una reference) no es posible.
No puedes tener una reference sin inicializar.
Las References deben inicializarse con una variable existente.
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!
voidCon el poder de las references, puede que no necesites devolver ningún valor de una función.
En este escenario se usa void como tipo de retorno.
void increase_power(int& level) {
level += 500;
}
int goku{8700};
increase_power(goku);
// goku's power level?
// It's over 9000!