const-referanser og når de bør brukes
Send store objekter effektivt og trygt med const-referanser.
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)); // rvalueForlenget 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.
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
- Hvorfor referanser er aliaser for variabler
- Passering med verdi kontra passering med referanse
- const-referanser og når de bør brukes
- Referansers levetid og hengende referanser