首页 >后端开发 >C++ >为什么 C 不会抛出整数被零除的异常?

为什么 C 不会抛出整数被零除的异常?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-25 08:03:14121浏览

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

捕获除零异常

尽管尝试使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn