是否有Java的c ++等价物
try {
...
}
catch (Throwable t) {
...
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试调试调用本机Windows函数的Java/jni代码,并且虚拟机不断崩溃.本机代码在单元测试中看起来很好,并且在通过jni调用时似乎只会崩溃.一般的异常捕获机制将证明是非常有用的.
当我尝试除以0时,下面的代码没有捕获异常.我是否需要抛出异常,或者计算机是否在运行时自动抛出一个异常?
int i = 0;
cin >> i; // what if someone enters zero?
try {
i = 5/i;
}
catch (std::logic_error e) {
cerr << e.what();
}
Run Code Online (Sandbox Code Playgroud) 这是一段简单的代码,其中除以零.我想抓住它:
#include <iostream>
int main(int argc, char *argv[]) {
int Dividend = 10;
int Divisor = 0;
try {
std::cout << Dividend / Divisor;
} catch(...) {
std::cout << "Error.";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是应用程序无论如何都会崩溃(即使我选择-fexceptions
了MinGW).
是否有可能捕获到这样的异常(我理解的不是C++异常,而是FPU异常)?
我知道我可以在分割之前检查除数,但我做了一个假设,因为除零是罕见的(至少在我的应用程序中),尝试分割会更有效(并且如果捕获错误则更有效)它发生)而不是每次除数前的除数.
我正在WindowsXP计算机上进行这些测试,但是想让它跨平台.
当出现零除错误时会抛出什么样的异常?我尝试使用"catch-all" catch(...)
,但Visual Studio仍然抱怨有一个未处理的异常.
int a = 0;
try
{
a /= a;
}
catch (/* what should I catch?*/)
{
cout << "divide by zero error" << endl;
}
Run Code Online (Sandbox Code Playgroud)
注意:我不是问如何预先防止这种类型的问题(例如,在尝试除以零之前检查a是否为零).