try, catch, throw
Håndter feil med unntak
try, catch, throw er en gratis leksjon i C++ Academy på CoddyKit. Dette er leksjon 1 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.
Signalisere feil med throw
Utsagnet throw utløser et unntak, forlater den nåværende kjøringsbanen og leter etter en behandler oppover i kallstakken.
#include <iostream>
#include <stdexcept>
int main() {
try {
throw std::runtime_error("boom");
} catch (const std::exception& e) {
std::cout << e.what() << "\n";
}
}try og catch
Kode som kan utløse et unntak, plasseres i en try-blokk. Samsvarende behandlere følger i catch-blokker.
#include <iostream>
#include <stdexcept>
int divide(int a, int b) {
if (b == 0) throw std::invalid_argument("divide by zero");
return a / b;
}
int main() {
try {
std::cout << divide(10, 0) << "\n";
} catch (const std::invalid_argument& e) {
std::cout << "error: " << e.what() << "\n";
}
}Fang med const-referanse
Fang alltid unntak med const&. Hvis du fanger med verdi, blir avledede unntak avkuttet, og det utføres unødvendige kopieringer.
Flere catch-blokker
List opp behandlerne fra mest spesifikk til mest generell. Den første blokken som samsvarer, kjøres.
#include <iostream>
#include <stdexcept>
int main() {
try {
throw std::out_of_range("bad index");
} catch (const std::out_of_range& e) {
std::cout << "range: " << e.what() << "\n";
} catch (const std::exception& e) {
std::cout << "other: " << e.what() << "\n";
}
}Stakkavvikling
Når et unntak utløses, blir stakken avviklet: Alle lokale objekter mellom stedet der unntaket utløses og behandleren, destrueres i motsatt rekkefølge.
#include <iostream>
#include <stdexcept>
struct Trace {
~Trace() { std::cout << "unwound\n"; }
};
void f() {
Trace t;
throw std::runtime_error("x");
}
int main() {
try { f(); } catch (...) { std::cout << "caught\n"; }
}Behandler for alle unntak
En catch (...)-blokk fanger alle unntakstyper. Bruk den med måte, vanligvis for å logge og utløse unntaket på nytt.
Utløse unntaket på nytt
Inne i en behandler utløser en naken throw; det gjeldende unntaket på nytt og bevarer typen, slik at en ytre behandler kan håndtere det.
#include <iostream>
#include <stdexcept>
void inner() { throw std::runtime_error("deep"); }
void middle() {
try { inner(); }
catch (...) { std::cout << "logged\n"; throw; } // rethrow
}
int main() {
try { middle(); } catch (const std::exception& e) { std::cout << e.what() << "\n"; }
}Standardunntakshierarkiet
De fleste standardunntak arver fra std::exception, som tilbyr what(). Hvis du fanger std::exception, håndterer du dem alle.
Utløs med verdi, fang med referanse
Utløs midlertidige unntaksobjekter med verdi. Kjøremiljøet kopierer dem til et trygt minneområde. Fang med referanse for å unngå avkutting.
Unntak kontra feilkoder
Unntak skiller feilbanen fra den normale kjøringsbanen og kan ikke ignoreres i stillhet — i motsetning til returkoder. Reserver dem for situasjoner som faktisk er eksepsjonelle.
Ufangede unntak avslutter programmet
Hvis ingen behandler samsvarer, kalles std::terminate, og programmet avbrytes. Håndter alltid unntak du forventer.
Hurtigsjekk
Test forståelsen din av unntakshåndtering.
Oppsummering
Du har lært å utløse feil med throw, håndtere dem med try/catch og hvordan stakkavvikling destruerer lokale objekter underveis. Fang med const&, ordne behandlerne fra spesifikk til generell, og utløs unntaket på nytt med en naken throw;.
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 «try, catch, throw» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien C++ Academy, inkludert «try, catch, throw», 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 «try, catch, throw»?
Håndter feil med unntak 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 1 av 4.
Hvor lang tid tar leksjonen «try, catch, throw»?
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
- try, catch, throw
- Unntakssikkerhet
- noexcept-spesifikatoren
- Egendefinerte unntakstyper