Με όσα ξέρουμε μέχρι τώρα, το να ενημερώσεις μια μεταβλητή με τη βοήθεια μιας συνάρτησης είναι λίγο μπελαλίδικο. Κάθε όρισμα συνάρτησης αντιμετωπίζεται σαν αντίγραφο και δεν αλλάζει την αρχική τιμή. Ανάλογα με το μέγεθος του τύπου σου, αυτό μπορεί να έχει σοβαρές συνέπειες στην απόδοση του κώδικά σου.
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 μπορούν να θεωρηθούν ψευδώνυμα: οι αλλαγές σε αυτές επηρεάζουν την αρχική μεταβλητή.
Οι References χρησιμοποιούν ένα συμπλεκτικό (&) στη δήλωση του τύπου.
int balance{1000};
int& budget{balance};
int pro_computer_wheels{699};
budget -= pro_computer_wheels;
// budget is now 301;
// balance is also 301;
Η επανασύνδεση (η αλλαγή της σύνδεσης μιας reference) δεν είναι δυνατή.
Δεν μπορείς να έχεις μια reference που δεν έχει αρχικοποιηθεί.
Οι References πρέπει να αρχικοποιηθούν με μια υπάρχουσα μεταβλητή.
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!
voidΜε τη δύναμη των references, μπορεί να μη χρειάζεται καθόλου να επιστρέψεις μια τιμή από μια συνάρτηση.
Σε αυτή την περίπτωση, το void χρησιμοποιείται ως τύπος επιστροφής.
void increase_power(int& level) {
level += 500;
}
int goku{8700};
increase_power(goku);
// goku's power level?
// It's over 9000!