Heim > Backend-Entwicklung > C++ > Warum löst C keine Ausnahme für die Ganzzahldivision durch Null aus?

Warum löst C keine Ausnahme für die Ganzzahldivision durch Null aus?

Mary-Kate Olsen
Freigeben: 2024-12-25 08:03:14
Original
119 Leute haben es durchsucht

Why Doesn't C   Throw an Exception for Integer Divide-by-Zero?

Abfangen von Divide-by-Zero-Ausnahmen

Trotz Versuchen, eine Ausnahme mithilfe eines Try/Catch-Blocks abzufangen, umgeht der folgende Code aus unerklärlichen Gründen die Ausnahme bei Division durch Null:

int i = 0;

cin >> i; // input validation not present

try {
    i = 5/i;
}
catch (std::logic_error e) {

    cerr << e.what();
}
Nach dem Login kopieren

Ausnahmebehandlung in C

Entgegen den Erwartungen ist die Ganzzahldivision durch Null keine eingebaute Ausnahme in Standard-C. Dies gilt auch für Gleitkommadivision/-rest durch Null, obwohl in diesem Fall spezifische rationale Werte wie NaN/Inf resultieren können.

Die Liste der im ISO C 20-Standard definierten Ausnahmen umfasst:

logic_error
domain_error
invalid_argument
length_error
out_of_range
runtime_error
range_error
overflow_error
underflow_error
Nach dem Login kopieren

Während Argumente dafür vorgebracht werden könnten, overflow_error oder domain_error zu verwenden, um eine Division durch Null anzugeben, gibt der Standard ausdrücklich an, dass das Verhalten in einem solchen Fall undefiniert ist Fälle.

Benutzerdefinierte Ausnahmebehandlung

Wenn eine Division durch Null-Ausnahme gewünscht ist, kann diese manuell implementiert werden. Im folgenden Beispiel wird die intDivEx-Funktion verwendet, um Ganzzahlen mit Ausnahmebehandlung zu dividieren:

inline int intDivEx (int numerator, int denominator) {
    if (denominator == 0)
        throw std::overflow_error("Divide by zero exception");
    return numerator / denominator;
}
Nach dem Login kopieren

Die Ausgabe dieser Funktion zeigt, dass die Ausnahme ausgelöst und abgefangen wird, wobei die ursprüngliche Variable im Falle einer Division durch unberührt bleibt -Null:

i = intDivEx(10, 0); // throws exception

i = intDivEx(10, 2); // returns 5
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum löst C keine Ausnahme für die Ganzzahldivision durch Null aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage