0Pricing
C++ Academy · Leçon

try, catch, throw

Gérer les erreurs avec des exceptions

try, catch, throw est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.

Signaler des erreurs en levant une exception

L’instruction throw lève une exception, abandonne le chemin d’exécution actuel et cherche un gestionnaire plus haut dans la pile d’appels.

#include <iostream>
#include <stdexcept>

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

Blocs d’essai et d’interception

Le code susceptible de lever une exception se place dans un bloc try ; les gestionnaires correspondants le suivent dans des blocs 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";
    }
}

Intercepter par référence constante

Interceptez toujours les exceptions par const&. Une interception par valeur tronque les exceptions dérivées et effectue des copies inutiles.

Plusieurs blocs d’interception

Énumérez les gestionnaires du plus spécifique au plus général. Le premier bloc correspondant s’exécute.

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

Déroulement de la pile

Lorsqu’une exception est levée, la pile se déroule : chaque objet local situé entre la levée et le gestionnaire est détruit dans l’ordre inverse.

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

Gestionnaire général

Un bloc catch (...) intercepte n’importe quel type d’exception. Utilisez-le avec parcimonie, généralement pour journaliser l’exception et la relancer.

Relancer une exception

Dans un gestionnaire, un throw; nu relance l’exception actuelle en préservant son type, afin qu’un gestionnaire extérieur puisse la traiter.

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

Hiérarchie des exceptions standard

La plupart des exceptions standard dérivent de std::exception, qui expose what(). Intercepter std::exception permet de toutes les traiter.

Lever par valeur, intercepter par référence

Levez les objets d’exception temporaires par valeur ; l’environnement d’exécution les copie dans une zone sûre. Interceptez-les par référence pour éviter le tronquage.

Exceptions ou codes d’erreur

Les exceptions séparent le chemin d’erreur du chemin nominal et ne peuvent pas être ignorées silencieusement, contrairement aux codes de retour. Réservez-les aux situations réellement exceptionnelles.

Les exceptions non interceptées terminent le programme

Si aucun gestionnaire ne correspond, std::terminate est appelé et le programme s’arrête. Traitez toujours les exceptions auxquelles vous vous attendez.

Vérification rapide

Vérifiez votre compréhension de la gestion des exceptions.

Récapitulatif

Vous avez appris à signaler des erreurs avec throw, à les traiter avec try/catch et à comprendre comment le déroulement de la pile détruit les objets locaux en chemin. Interceptez par const&, ordonnez les gestionnaires du plus spécifique au plus général et relancez l’exception avec un throw; nu.

Questions Fréquemment Posées

La leçon « try, catch, throw » est-elle gratuite ?

Oui — le texte complet de « try, catch, throw » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « try, catch, throw » ?

Gérer les erreurs avec des exceptions Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C++ Academy ?

Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « try, catch, throw » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?

Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. try, catch, throw
  2. Sûreté vis-à-vis des exceptions
  3. Spécificateur noexcept
  4. Types d’exceptions personnalisés
← Retour à C++ Academy