catch

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Liste alphabétique des mots clés - Index


Catégorie

Instructions, Mots clés spécifiques au C++

Syntaxe

catch (exception-declaration) compound-statement

Description


Utilisé pour les techniques de gestion des exceptions, le mot clé catch marque un bloc de code de gestion d'exception. L'exception spécifique gérée par ledit bloc de code est déterminée par le type d'exception donné en déclaration d'exception. La déclaration d'exception peut être un pointeur sur une classe dérivée de la classe de base Exception, un type simple, un type structuré ou la notation "...".

try {
    throw 1;
} catch (int) {
    ShowMessage("int caught");
}

Pour tous les types spécifiés ci-dessus, à l'exception de la notation ..., un nom peut être donné pour l'objet intercepté, afin d'être utilisé dans le bloc de code catch.

try {
    throw 1;
} catch (int x) {
    ShowMessage("int " + IntToStr(x) + " caught");
}

Un objet VCL peut être utilisé en tant qu'exception et, quand le bloc de code catch a terminé, le destructeur est automatiquement invoqué pour l'objet intercepté. Le code suivant affiche le message "destructor".

Chaque gestionnaire n'évaluera qu'une seule exception qui correspond au type spécifié dans sa liste d'arguments, ou peut-être convertie dans ce type, à l'exception de ... qui intercepte toutes les exceptions.

class MException : public TObject {
    virtual __fastcall ~MException(){ ShowMessage("destructor"); }
};

//somewhere in the code
try {
    throw new MException;
} catch (MException*) {
}

Plusieurs blocs de code catch peuvent être utilisés pour le même try. Les blocs de code catch sont enregistrés par le compilateur dans l'ordre de leur déclaration. Par exemple :

try {
    throw "exception";
} catch (const char*) {
    ShowMessage("string caught");
} catch (...){
    ShowMessage("anything caught");
}

Quand plusieurs blocs catch sont utilisés et si un bloc ... est présent, celui-ci doit être le dernier. Le compilateur émet une erreur, mais s'il ne le faisait pas, les blocs de code catch après ... ne seraient jamais appelés, les rendant ainsi inutiles.

Le mot clé catch peut seulement être utilisé dans les programmes C++ ; utilisez __try - __except ou __try - __finally en C.

Voir aussi