MODUŁ 04
Przekazywanie przez wartość i const T&
Przekazanie przez wartość tworzy parametr będący kopią argumentu. Zmiana parametru nie zmienia zmiennej wywołującej. Dla małych typów (int, long long, bool, double) to zwykle dobry wybór.
W skrócie
Przekazanie przez wartość tworzy parametr będący kopią argumentu. Zmiana parametru nie zmienia zmiennej wywołującej. Dla małych typów (int, long long, bool, double) to zwykle dobry wybór.
Referencja (T&) to odwrotność: alias, czyli drugie imię tego samego obiektu. Funkcja o typie void nic nie zwraca, ale przez referencję może zmienić oryginał — przypisanie do parametru w ciele funkcji zmienia wtedy zmienną wywołującego. Tak działa też wektor przekazany przez std::vector<int>&: funkcja dostaje dostęp do oryginalnej kolekcji (potocznie mówi się, że „dostała ją adresem”; naprawdę dostała alias), więc zmiana dane[0] w funkcji zmienia element u wywołującego.
Duże obiekty, np. std::vector<int> i std::string, przekazujemy zwykle przez const T&, jeśli funkcja ma je jedynie czytać. Dzięki temu nie kopiuje całej kolekcji, a const uniemożliwia modyfikowanie jej przez ten parametr — to alias tylko do odczytu.
Przykład
int podwoj(int x) {
x *= 2;
return x; // zmienia kopię, nie oryginał
}
void wyzerujPierwszy(std::vector<int>& dane) {
if (!dane.empty()) dane[0] = 0; // zmienia oryginał przez referencję
}
int suma(const std::vector<int>& v) {
int wynik = 0;
for (int x : v) wynik += x;
return wynik; // tylko odczyt, bez kopiowania
}