catch

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Schlüsselwörter alphabetisch - Index


Kategorie

Anweisungen, C++-spezifische Schlüsselwörter

Syntax

catch (exception_declaration) compound_statement

Beschreibung


Das Schlüsselwort "catch" wird in Exception-Behandlungstechniken verwendet und kennzeichnet einen Exception-Behandlungscodeblock. Die jeweilige Exception, die von diesem Codeblock behandelt wird, ist durch den in der Exception-Deklaration angegebenen Typ der Exception festgelegt. Die Exception-Deklaration kann ein Zeiger auf eine von der Exception-Basisklasse abgeleitete Klasse, ein einfacher Typ, ein strukturierter Typ oder die Notation "..." sein.

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

Für alle oben genannten Typen, außer der Notation "...", kann ein Name für das abgefangene Objekt angegeben werden, der im "catch"-Block verwendet werden soll.

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

Als Exception kann ein beliebiges VCL-Objekt verwendet werden, und nach Beendigung des "catch"-Codeblocks wird der Destruktor automatisch für das abgefangene Objekt aufgerufen. Der folgende Code zeigt die Destruktormeldung.

Jede Behandlungsroutine wertet nur eine Exception aus, die mit dem in ihrer Argumentliste spezifizierten Typ übereinstimmt oder in diesen konvertiert werden kann. Dies gilt nicht für die Notation "...", die alle Exceptions abfängt.

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

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

Mehrere "catch"-Codeblöcke können für dieselbe "try"-Anweisung verwendet werden. Die "catch"-Codeblöcke werden vom Compiler in der Reihenfolge registriert, in der sie deklariert sind. Zum Beispiel:

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

Wenn mehrere "catch"-Blöcke verwendet werden und ein "..."-Block vorhanden ist, muss dieser der letzte sein. Ist dies nicht der Fall, gibt der Compiler einen Fehler aus, weil die "catch"-Codeblöcke nach dem "..."-Block nie aufgerufen würden und daher nutzlos wären.

Das Schlüsselwort catch wird nur in C++-Programmen unterstützt; verwenden Sie in C __try - __except oder __try - __finally.

Siehe auch