捕获除零异常
尽管尝试使用 try/catch 块捕获异常,但以下代码莫名其妙地绕过了除以时的异常零:
int i = 0; cin >> i; // input validation not present try { i = 5/i; } catch (std::logic_error e) { cerr << e.what(); }
C 中的异常处理
与预期相反,整数除以零并不是标准 C 中的内置异常。对于浮点除以零/余数也是如此,尽管在这种情况下,可能会产生 NaN/Inf 等特定有理值。
ISO C 20 标准中定义的例外列表包括:
logic_error domain_error invalid_argument length_error out_of_range runtime_error range_error overflow_error underflow_error
虽然可以使用overflow_error或domain_error来表示被零除,但标准明确指出该行为在这种情况下是未定义的
自定义异常处理
如果需要除零异常,可以手动实现。以下示例使用 intDivEx 函数来除以异常处理:
inline int intDivEx (int numerator, int denominator) { if (denominator == 0) throw std::overflow_error("Divide by zero exception"); return numerator / denominator; }
使用此函数的输出演示了异常被抛出和捕获,在除以的情况下保持原始变量不变-零:
i = intDivEx(10, 0); // throws exception i = intDivEx(10, 2); // returns 5
以上是为什么 C 不会抛出整数被零除的异常?的详细内容。更多信息请关注PHP中文网其他相关文章!