W budowie
Materiał edukacyjny · Informatyka

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
}

Ćwiczenia