指定されたコード スニペットでは、ゼロ除算は例外をトリガーしません。これはなぜ起こるのでしょうか?また、そのようなエラーに対して例外が確実にスローされるようにするにはどうすればよいですか?
他の一般的なランタイム エラーとは異なり、標準 C では整数のゼロ除算は例外ではありません。浮動小数点の除算または剰余演算も、本質的に例外をスローしません。代わりに、2 番目のオペランドがゼロの場合、これらの操作は未定義の動作をします。これは、システムが例外のスロー、プログラムのクラッシュ、さらにはプログラムの範囲外のアクションの実行など、予期しない動作を行う可能性があることを意味します。
標準 C では処理できないためゼロによる除算が例外として発生する場合、開発者はそのような条件を手動でチェックし、必要に応じてカスタム例外をスローする必要があります。たとえば、overflow_error または domain_error をスローして、ゼロ除算エラーを示すことができます。
次の変更されたコード スニペットは、カスタム intDivEx を使用してゼロ除算例外をキャッチする方法を示しています。関数:
#include <iostream> #include <stdexcept> // Integer division, catching divide by zero. inline int intDivEx(int numerator, int denominator) { if (denominator == 0) throw std::overflow_error("Divide by zero exception"); return numerator / denominator; } int main() { int i = 42; try { i = intDivEx(10, 0); } catch (std::overflow_error &e) { std::cout << e.what() << " -> " << i << std::endl; } std::cout << i << std::endl; try { i = intDivEx(10, 2); } catch (std::overflow_error &e) { std::cout << e.what() << " -> " << i << std::endl; } std::cout << i << std::endl; return 0; }
Divide by zero exception -> 42 5
このコードは正しくありますi の元の値を保持しながら、ゼロ除算例外をスローおよびキャッチします。
以上がC が整数のゼロ除算で例外をスローしないのはなぜですか?また、それをどのように処理すればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。