... (catch-all)

Wenn beim catch-Keyword anstelle eines Typs drei Punkte ... angegeben werden, so definiert der catch-Block den allgemeinen Handler für sämtliche, auch nicht-definierte Exceptions. Umgangssprachlich spricht man auch von catch-all.

#include <stdio.h> void openfile(){ FILE* file = fopen("notexistingfile.txt", "r"); if(!file){throw 1;} } int main(){ try{ openfile(); }catch(...){ printf("An unspecified error occured.\n"); } return 0; }

An unspecified error occured.

Siehe auch try-catch, catch, throw

Details

Diese drei Punkte werden in anderen Sprachen als catch-all bezeichnet, dieser Ausdruck ist jedoch in C++ nicht in der Sprache definiert und kann daher nur umgangssprachlich verwendet werden.

Die catch-all-Routine ist nicht zwingend, muss jedoch bei Gebrauch als letzter Block einer try-catch-Struktur definiert sein.

Der catch-all-Handler ist ähnlich zu betrachten wie das default-Keyword bei einer switch-Struktur: Wenn nebst der catch-all-Routine noch andere, typisierte catch-Blöcke definiert sind, so wird die passende Routine angesprungen. Nur im Falle, dass keine passende Routine definiert ist, wird der catch-all-Block angesprungen.

Im Unterschied zu einem typisierten catch-Block kann keine Variable übergeben werden.