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
- try, catch, throw
- Sicurezza rispetto alle eccezioni
- Specificatore noexcept
- Tipi di eccezione personalizzati