C++:
Feilhåndtering

Hvordan:

Her er en grunnleggende try-catch blokk for å håndtere et unntak:

#include <iostream>
#include <stdexcept>

int main() {
    try {
        throw std::runtime_error("Oops! Noe gikk galt.");
    } catch (const std::exception& e) {
        std::cerr << "Feil: " << e.what() << std::endl;
    }
    return 0;
}

Eksempel på utskrift:

Feil: Oops! Noe gikk galt.

Dykk dypere

C++ har hatt feilhåndtering siden sine tidlige dager. Den mest grunnleggende formen var å sjekke returverdier. Hvis du har vært med en stund, husker du før-standard dagene: C med klasser og manuell feilsjekking.

Så kom unntak med C++ for å gi oss en strukturert måte å håndtere uventede problemer på. Et unntak blir kastet med throw og fanget med try/catch.

To typer feil dukker ofte opp: logiske feil, som en feil kalkulasjon, og kjøretidsfeil, som å få tilgang til en ugyldig minneadresse. Unntak er ideelt for kjøretidsfeil. For logiske feil er det ofte bedre å bruke påstander eller feilkoder.

Det pågår en kontinuerlig debatt om unntak vs. feilkoder. Unntak kan være tregere og kan føre til komplekse kontrollflyter. Feilkoder, mens de er raskere, kan gjøre kode rotete og vanskeligere å vedlikeholde. Det er en avveining, så å vite bruksområdet ditt er nøkkelen.

C++17 introduserte std::optional og std::variant, som er alternativer til unntak. De er nyttige for funksjoner som kanskje ikke returnerer et gyldig resultat.

Unntakssikkerhet kan være en annen hodepine. Det handler om garantier koden din gir til tross for unntak. Det er tre nivåer: grunnleggende, sterk og nothrow. Jo flere garantier, jo mer kompleks kan koden din være.

Avsluttende tanker - feilhåndtering er like mye kunst som vitenskap. Det former hvordan applikasjonen din overlever i det fri. Misbruk ikke unntak. Mål for lesbart, vedlikeholdbart kode.

Se også