C++ Academy · leksjon

const-referanser og når de bør brukes

Send store objekter effektivt og trygt med const-referanser.

Leksjon 3 av 413 trinn

const-referanser og når de bør brukes er en gratis leksjon i C++ Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C++ Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C++ Academy inneholder totalt 4 leksjoner.

Hva en const-referanse lover

En const T& sier: "Jeg vil ikke endre det jeg refererer til." Kompilatoren håndhever dette.

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

Hvorfor ikke bare overføre med verdi

Det er sløsing å kopiere store objekter. En const-referanse koster i praksis ingenting (den er bare en peker internt) og lar aldri funksjonen endre dataene hos den som kaller funksjonen.

Kan bindes til hva som helst

En const-referanse kan bindes til lvalues, rvalues og midlertidige objekter, noe som gjør den til den mest fleksible parametertypen for skrivebeskyttet tilgang.

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

Forlenget levetid

Å binde et midlertidig objekt til en const-referanse forlenger det midlertidige objektets levetid til referansens levetid. Nyttig ved konstruksjon direkte i uttrykket.

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

Når const-referanse IKKE bør brukes

For typer som kan kopieres trivielt (int, double, pointer) bør du overføre med verdi. Referansen legger til et indireksjonsnivå uten å spare noe.

Const-referanse i områdebasert for-løkke

Den kanoniske skrivebeskyttede løkken. Unngå både kopiering og utilsiktede endringer.

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

Returnere const-referanse

Returner en const-referanse når resultatet er et eksisterende objekt som den som kaller funksjonen ikke bør endre, for eksempel et medlem eller en bufret verdi.

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

Const-korrekthet

Merk alle parametere og medlemsfunksjoner som ikke endrer tilstanden, med const. Kompilatoren fanger opp utilsiktede skrivninger – et kraftig sikkerhetsnett.

Const-medlemsfunksjoner

En medlemsfunksjon som er merket med const etter parameterlisten, kan ikke endre objektet. Den kan kalles på const-instanser.

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

Fallgruve: const_cast fjerner const

Du kan fjerne const med const_cast, men å gjøre dette på et opprinnelig const-objekt er udefinert oppførsel. Bruk det bare ved samhandling med eldre API-er som ikke bruker const.

mutable for intern tilstand

Nøkkelordet mutable lar en const-medlemsfunksjon endre bestemte medlemmer – nyttig for hurtigbufring eller mutexer.

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

Kjapp kontroll

Hvorfor er det vanligvis bedre å skrive const std::string& enn std::string for en parameter?

Oppsummering

Bruk const T& for skrivebeskyttede parametere, returverdier fra getter-funksjoner og områdebaserte løkker. Det er raskere enn overføring med verdi for ikke-trivielle typer og tryggere enn ikke-const-referanser.

Gratis å komme i gang

Lær deg C++ med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
51
Leksjoner
203

Ofte stilte spørsmål

Er leksjonen «const-referanser og når de bør brukes» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien C++ Academy, inkludert «const-referanser og når de bør brukes», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i C++ Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «const-referanser og når de bør brukes»?

Send store objekter effektivt og trygt med const-referanser. Du øver på C++ Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C++ Academy?

Ingen tidligere erfaring er nødvendig. C++ Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «const-referanser og når de bør brukes»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C++ Academy-leksjonen?

Ja. Alle C++ Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Hvorfor referanser er aliaser for variabler
  2. Passering med verdi kontra passering med referanse
  3. const-referanser og når de bør brukes
  4. Referansers levetid og hengende referanser
← Tilbake til C++ Academy