当我尝试除以 0 时,以下代码未捕获异常。我需要抛出异常,还是计算机在运行时自动抛出异常?
int i = 0;
cin >> i; // what if someone enters zero?
try {
i = 5/i;
}
catch (std::logic_error e) {
cerr << e.what();
}
原文由 user33424 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
您需要自己检查并抛出异常。整数除以零在标准 C++ 中也不例外。
浮点除以零也不是,但至少它有处理它的特定方法。
ISO 标准中列出的例外情况是:
您可以非常有说服力地争辩说
overflow_error
(由 IEEE754 浮点生成的无穷大可能被认为是溢出)或domain_error
(这 是 输入值的问题)将是理想的表示除以零。但是,
5.6
(属于C++11
部分,尽管我认为这与之前的迭代相比没有改变)明确指出:因此,它 可能会 抛出那些(或任何其他)异常。它还可以格式化您的硬盘并嘲笑:-)
如果你想实现这样的野兽,你可以在下面的程序中使用类似
intDivEx
的东西(使用溢出变体):这输出:
你可以看到它抛出并捕获了除以零的异常(保持返回变量不变)。
%
等效项几乎完全相同: