0Pricing
C++ Academy · Lezione

try, catch, throw

Gestire gli errori con le eccezioni

try, catch, throw è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.

Segnalare gli errori con throw

L'istruzione throw solleva un'eccezione, abbandona il percorso corrente e cerca un gestore risalendo lo stack delle chiamate.

#include <iostream>
#include <stdexcept>

int main() {
    try {
        throw std::runtime_error("boom");
    } catch (const std::exception& e) {
        std::cout << e.what() << "\n";
    }
}

try e catch

Il codice che potrebbe sollevare un'eccezione va inserito in un blocco try; i gestori corrispondenti seguono nei blocchi catch.

#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";
    }
}

Catturare per riferimento const

Catturi sempre le eccezioni tramite const&. Catturarle per valore tronca le eccezioni derivate e crea copie non necessarie.

Blocchi catch multipli

Elencare i gestori dal più specifico al più generale. Viene eseguito il primo blocco corrispondente.

#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";
    }
}

Svolgimento dello stack

Quando viene sollevata un'eccezione, lo stack si svolge: ogni oggetto locale tra il punto in cui viene sollevata e il gestore viene distrutto in ordine inverso.

#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"; }
}

Gestore catch-all

Un blocco catch (...) cattura qualsiasi tipo di eccezione. Lo utilizzi con parsimonia, di solito per registrare l'errore e rilanciare l'eccezione.

Rilanciare un'eccezione

All'interno di un gestore, un throw; senza argomenti rilancia l'eccezione corrente, preservandone il tipo, così un gestore esterno può occuparsene.

#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"; }
}

Gerarchia standard delle eccezioni

La maggior parte delle eccezioni standard deriva da std::exception, che espone what(). Catturare std::exception permette di gestirle tutte.

Sollevare per valore, catturare per riferimento

Sollevi gli oggetti eccezione temporanei per valore; il runtime li copia in un'area di memoria sicura. Li catturi per riferimento per evitare il troncamento.

Eccezioni e codici di errore

Le eccezioni separano il percorso di errore dal percorso di successo e non possono essere ignorate silenziosamente, a differenza dei codici restituiti. Le riservi a situazioni realmente eccezionali.

Le eccezioni non catturate terminano il programma

Se nessun gestore corrisponde, viene chiamato std::terminate e il programma si interrompe. Gestisca sempre le eccezioni previste.

Verifica rapida

Verifichi la comprensione della gestione delle eccezioni.

Riepilogo

Ha imparato a sollevare gli errori con throw, a gestirli con try/catch e a capire come lo svolgimento dello stack distrugga gli oggetti locali lungo il percorso. Catturi tramite const&, ordini i gestori dal più specifico al più generale e rilanci l'eccezione con un throw; senza argomenti.

Domande Frequenti

La lezione «try, catch, throw» è gratuita?

Sì — il testo completo di «try, catch, throw» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.

Cosa imparerò in «try, catch, throw»?

Gestire gli errori con le eccezioni Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C++ Academy?

Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «try, catch, throw»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C++ Academy?

Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. try, catch, throw
  2. Sicurezza rispetto alle eccezioni
  3. Specificatore noexcept
  4. Tipi di eccezione personalizzati
← Torna a C++ Academy