C++ Academy · Lekcja

Referencje const i kiedy ich używać

Przekazuj duże obiekty wydajnie i bezpiecznie za pomocą referencji const

Lekcja 3 z 413 kroki

Referencje const i kiedy ich używać to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.

Co gwarantuje referencja const

const T& oznacza: „Nie będę modyfikować obiektu, do którego się odnoszę”. Kompilator tego pilnuje.

void print(const std::string& s) {
    // s.clear();   // ERROR: s is const
    std::cout << s;
}

Dlaczego nie przekazywać po prostu przez wartość

Kopiowanie dużych obiektów jest nieefektywne. Referencja const jest zasadniczo bezkosztowa (wewnętrznie to po prostu wskaźnik) i nigdy nie pozwala funkcji modyfikować danych kodu wywołującego.

Powiązanie z dowolnym obiektem

Referencja const może zostać powiązana z lvalue, rvalue i obiektem tymczasowym, dzięki czemu jest najbardziej uniwersalnym typem parametru do dostępu tylko do odczytu.

void f(const std::string& s);
std::string a = "hi";
f(a);                 // lvalue
f("hello");           // temporary string
f(std::move(a));      // rvalue

Wydłużenie czasu życia

Powiązanie obiektu tymczasowego z referencją const wydłuża czas życia obiektu tymczasowego do czasu życia referencji. Jest to przydatne przy tworzeniu obiektów bezpośrednio w wyrażeniu.

const std::string& greeting = "Hello, " + name;
// the concatenated string lives as long as `greeting`

Kiedy NIE używać referencji const

W przypadku typów kopiowalnych w sposób trywialny (int, double, wskaźnik) należy przekazywać wartości przez wartość. Referencja dodaje dodatkowe wyłuskanie, nie zapewniając żadnych korzyści.

Referencja const w pętli for opartej na zakresie

Standardowy idiom pętli tylko do odczytu. Pozwala uniknąć zarówno kopiowania, jak i przypadkowej modyfikacji.

for (const auto& x : container) {
    process(x);
}

Zwracanie referencji const

Referencję const należy zwracać, gdy wynik jest istniejącym obiektem, którego kod wywołujący nie powinien modyfikować (na przykład składową lub wartością w pamięci podręcznej).

class Person {
    std::string name_;
public:
    const std::string& name() const { return name_; }
};

Poprawność const

Każdy parametr i każdą funkcję składową, które nie modyfikują stanu, należy oznaczyć jako const. Kompilator wykryje przypadkowe zapisy — to skuteczna ochrona.

Funkcje składowe const

Funkcja składowa oznaczona jako const za listą parametrów nie może modyfikować obiektu. Można ją wywoływać dla instancji const.

class Counter {
    int n_ = 0;
public:
    int value() const { return n_; }   // pure reader
    void increment() { n_++; }
};

Pułapka: const_cast usuwa const

Za pomocą const_cast można usunąć const, ale wykonanie tego na obiekcie, który pierwotnie był const, jest niezdefiniowanym zachowaniem. Należy używać tego wyłącznie podczas współpracy ze starszymi interfejsami API, które nie obsługują const.

mutable dla stanu wewnętrznego

Słowo kluczowe mutable pozwala funkcji składowej const modyfikować określone składowe — jest to przydatne w przypadku pamięci podręcznej lub muteksów.

class Cache {
    mutable std::mutex mtx_;
    mutable std::optional<int> cached_;
public:
    int value() const {
        std::lock_guard<std::mutex> lk(mtx_);
        // ...
    }
};

Szybkie sprawdzenie

Dlaczego parametr lepiej zazwyczaj zapisać jako const std::string& zamiast std::string?

Podsumowanie

Należy używać const T& dla parametrów tylko do odczytu, wartości zwracanych przez funkcje dostępowe oraz pętli for opartych na zakresie. Dla typów nietrywialnych jest to szybsze niż przekazywanie przez wartość i bezpieczniejsze niż używanie referencji bez const.

Bezpłatny start

Ucz się C++ dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
51
Lekcje
203

Często zadawane pytania

Czy lekcja „Referencje const i kiedy ich używać” jest bezpłatna?

Tak — pełny tekst „Referencje const i kiedy ich używać” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Referencje const i kiedy ich używać”?

Przekazuj duże obiekty wydajnie i bezpiecznie za pomocą referencji const Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C++ Academy?

Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Referencje const i kiedy ich używać”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?

Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Dlaczego referencje są aliasami zmiennych
  2. Przekazywanie przez wartość a przez referencję
  3. Referencje const i kiedy ich używać
  4. Czas życia referencji i wiszące referencje
← Powrót do C++ Academy