Heim  >  Artikel  >  Backend-Entwicklung  >  C++-Methoden zur Ausnahmebehandlung

C++-Methoden zur Ausnahmebehandlung

angryTom
angryTomOriginal
2019-10-23 11:51:564828Durchsuche

C++-Methoden zur Ausnahmebehandlung

c++-Ausnahmebehandlung

Programme stoßen beim Ausführen häufig auf ungewöhnliche Situationen, zum Beispiel: Divisor bei der Division 0; der Benutzer hat bei der Eingabe des Alters eine negative Zahl eingegeben; beim Zugriff auf Array-Elemente ist nicht genügend Speicherplatz vorhanden, der Index ist außerhalb der Grenzen; Datei existiert nicht usw.

Wenn diese ungewöhnlichen Situationen nicht erkannt und behandelt werden, kann es zum Absturz des Programms kommen.

Die sogenannte „Verarbeitung“ kann bedeuten, dass eine Fehlermeldung ausgegeben wird und das Programm dann auf einem fehlerfreien Pfad weiter ausgeführt werden kann. Es kann auch bedeuten, dass das Programm beendet werden muss, aber vorher einige notwendige Arbeiten ausführen müssen Beenden: Schreiben von Daten im Speicher in Dateien, Schließen geöffneter Dateien, Freigeben von dynamisch zugewiesenem Speicherplatz usw.

C++ führt einen Ausnahmebehandlungsmechanismus ein. Die Grundidee ist: Wenn Funktion A während der Ausführung eine Ausnahme findet, kann sie diese nicht verarbeiten, sondern „wirft einfach eine Ausnahme“ an den Aufrufer von A, von dem angenommen wird, dass er Funktion B ist.

Das Auslösen einer Ausnahme ohne Behandlung führt dazu, dass Funktion A sofort beendet wird. In diesem Fall kann Funktion B die von A ausgelöste Ausnahme abfangen und behandeln oder sie ignorieren. Bei Ignorierung wird die Ausnahme an den Aufrufer von B geworfen und so weiter.

Wenn die Funktionen auf jeder Ebene keine Ausnahmen verarbeiten, wird die Ausnahme schließlich an die äußerste Hauptfunktion geworfen. Die Hauptfunktion sollte Ausnahmen behandeln. Wenn die Hauptfunktion die Ausnahme nicht behandelt, wird das Programm sofort abnormal beendet.

Grundlegende Syntax für die C++-Ausnahmebehandlung

C++ behandelt Ausnahmen durch throw-Anweisungen und try...catch-Anweisungen. Die Syntax der throw-Anweisung lautet wie folgt:

throw  表达式;

Diese Anweisung löst eine Ausnahme aus. Eine Ausnahme ist ein Ausdruck, dessen Werttyp ein primitiver Typ oder eine Klasse sein kann. Es kann mehrere

try...catch 语句的语法如下:
try {
    语句组
}catch(异常类型) {
  异常处理代码
}...catch(异常类型) {
    异常处理代码
}

Fänge geben, aber es muss mindestens einen von geben.

Sie können try und den Inhalt in {} genauso gut als „try-Block“ bezeichnen und Catch und den Inhalt in {} als „catch-Block“ aufrufen

try... Der Ausführungsprozess der Catch-Anweisung ist: Führen Sie die Anweisungen im Try-Block aus. Wenn während der Ausführung keine Ausnahme ausgelöst wird, werden die Anweisungen nach dem letzten Catch-Block nach der Ausführung ausgeführt, alle Anweisungen im Catch-Block jedoch nicht ausgeführt werden; Wenn während der Ausführung des Try-Blocks eine Ausnahme ausgelöst wird, springt dieser unmittelbar nach dem Auslösen der Ausnahme zum ersten Catch-Block, dessen „Ausnahmetyp“ mit dem ausgelösten Ausnahmetyp übereinstimmt (man sagt, die Ausnahme sei „ „vom Catch-Block gefangen“), springen Sie nach der Ausführung zum Ende des letzten Catch-Blocks, um die Ausführung fortzusetzen.

Zum Beispiel das folgende Programm:

#include <iostream>
using namespace std;
int main()
{
    double m ,n;
    cin >> m >> n;
    try {
        cout << "before dividing." << endl;
        if( n == 0)
            throw -1; //抛出int类型异常
        else
            cout << m / n << endl;
        cout << "after dividing." << endl;
    }
    catch(double d) {
        cout << "catch(double) " << d <<  endl;
    }
    catch(int e) {
        cout << "catch(int) " << e << endl;
    }
    cout << "finished" << endl;
    return 0;
}

Das laufende Ergebnis des Programms ist wie folgt:

9 6↙
before dividing.
1.5
after dividing.
finished

Erklärung: Wenn n nicht 0 ist, gibt es keine Ausnahme wird in den Try-Block geworfen. Nachdem der Try-Block normal ausgeführt wurde, setzt das Programm daher die Ausführung über alle Catch-Blöcke hinaus fort und keiner der Catch-Blöcke wird ausgeführt.

Das laufende Ergebnis des Programms kann auch wie folgt aussehen:

9 0↙
before dividing.
catch\(int) -1
finished

Wenn n 0 ist, wird eine ganzzahlige Ausnahme im Try-Block ausgelöst. Nachdem eine Ausnahme ausgelöst wurde, stoppt der Try-Block die Ausführung sofort. Die ganzzahlige Ausnahme wird vom ersten Catch-Block mit passendem Typ abgefangen, d. h. sie wird zur Ausführung in den Catch(int e)-Block eingegeben. Nach der Ausführung des Catch-Blocks wird das Programm weiter ausgeführt, bis es normal endet.

Wenn die ausgelöste Ausnahme nicht vom Catch-Block abgefangen wird, ändern Sie beispielsweise Catch(int e) in Catch(char e). Wenn die Eingabe n 0 ist, wird die ganzzahlige Ausnahme nicht ausgelöst Der Catch-Block kann ihn abfangen, die Ausnahme wird nicht behandelt, dann wird das Programm sofort beendet und der Inhalt nach try...catch wird nicht ausgeführt.

Das obige ist der detaillierte Inhalt vonC++-Methoden zur Ausnahmebehandlung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Welche Sprache ist .net Video?Nächster Artikel:Welche Sprache ist .net Video?