Partager via


test, Catch, et instructions de jet (C++)

Les exceptions C++ utilisent les mots clés de test, de Catch et throw.

Une expression de jet signale l'erreur ou l'condition exceptionnelle.Vous pouvez utiliser un objet de tout type comme opérande d'une expression throw.Cet objet est généralement utilisé pour transmettre des informations sur l'erreur.En général, vous devez utiliser le type : : la classe d'exception ou une des classes dérivées qui sont définies dans la bibliothèque standard, ou si aucune de ces n'est appropriée, puis dérivent votre propre classe d'exception de type : : exception.

Un bloc try attache un ou plusieurs instructions qui pourraient lever une exception.

un ou plusieurs blocs catch suivent immédiatement un bloc try.chaque bloc catch spécifie le type d'exception qu'il peut gérer.

la syntaxe suivante montre un bloc d' try d'exemple et ses gestionnaires.Supposons qu' GetNetworkResource() acquiert des données sur un réseau se connectent, et que les deux types d'exceptions sont des classes définies par l'utilisateur qui dérivent de la note de type : : exception que les exceptions sont passés par référence dans l'instruction catch :

MyData md;
try {
   // code that could throw an exception
   md = GetNetworkResource();
}
catch (networkIOException& e) {
   // code that executes when an exception of type
  // networkIOException is thrown in the try block
//…
// Log error message in the exception object.
   cerr << e.what();
}
catch (myDataFormatException& e) {
   // code that handles another exception type
//…
 cerr << e.what();

}

// The following syntax shows a throw expression:

MyData GetNetworkResource()
{
    //...
    if(IOSuccess == false)
        throw networkIOException("Unable to connect");
    //...
    if(readError)
        throw myDataFormatException("Format error"); 
    // ...
}

Notes

Le code après que la clause d' try soit la section protégée de code.L'expression de jet lève (déclenche) une exception.Le bloc de code après que la clause d' catch soit le gestionnaire d'exceptions, et intercepte (les handles) l'exception levée par l'expression de jet si le type dans les expressions de jet et de Catch sont compatibles.Pour une liste des règles qui régissent la type-correspondance dans les blocs catch, consultez ___.Si l'instruction catch spécifie un bouton de sélection (...) au lieu d'un type, le bloc d' catch gère tout type d'exception, y compris les exceptions C et le système ou des exceptions application-générées telles que la protection de la mémoire, le division par zéro, et les violations à virgule flottante.Étant donné que les blocs catch sont essayés dans la commande de programme, ce gestionnaire doit être le dernier gestionnaire pour son bloc d' try .Catch de utilisation (…) avec précaution ; en général un tel bloc catch est utilisé pour stocker des erreurs et d'effectuer tout nettoyage supplémentaire avant de s'arrêter l'exécution du programme.Ne pas autoriser un programme à continuer à moins que le bloc catch sache gérer l'exception spécifique qui est interceptée.

Une jet-expression sans re-jets d'opérande l'exception actuellement gérée.Une telle expression doit apparaître uniquement dans un gestionnaire d' catch ou dans une fonction appelée à partir d'un gestionnaire d' catch .l'objet exception re-levé est l'objet exception d'origine (pas une copie).Par exemple :

try {
   throw CSomeOtherException();
}
catch(...) {  // Catch all exceptions – dangerous!!!
   // Respond (perhaps only partially) to exception
   throw;       // Pass exception to some other handler
}

Voir aussi

Référence

Gestion des exceptions C++

Mots clés C++

Exceptions non gérées C++

__uncaught_exception

Autres ressources

Comment : Gérer les exceptions dans les constructeurs de classe de base (C++)