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

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

Mary-Kate Olsen
发布: 2024-12-25 08:03:14
原创
119 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板