如何在C++中捕获"任何"异常?

Jam*_*ard 4 c++ exception

据我所知,c ++中的所有异常最终都会扩展exception.在Java世界中,Exception e无论Exception的类型如何,catch 都会起作用.这是如何在C++中完成的?

为什么没有捕获此片段异常?

try{        
    int z = 34/0;
    cout << "This line should not appear" << endl;
} catch (exception e) {
    cout << "An error has occurred: " << e.what();  // Not executed
}
Run Code Online (Sandbox Code Playgroud)

另外,在C++中,如何找出导致什么异常的动作?

Alo*_*ave 5

为什么没有捕获此片段异常?

除以的整数0不是标准的c ++异常.因此,在这种情况下不会抛出任何异常,您得到的是一个简单的未定义行为.

某些特定的编译器可能会将此场景映射到特定的异常,您必须检查编译器文档以查找相同的内容.但是,使用此类功能将是不可移植的,并且您的代码将仅限于您的特定编译器.

在这种情况下你能做的最好的事情就是自己检查错误条件(除数等于零)并明确地抛出异常.

另外,在C++中,如何找出导致什么异常的动作?

std::exception类提供的方法std::exception::what()专门为此.

  • @JamesLeonard:你应该只检查是否有东西与Java一样好奇.这两种语言是不同的,所以你应该假装学习时不懂Java; 任何相似之处仅仅是巧合,甚至可能只是表面上看似相似. (4认同)
  • @JamesLeonard只有当这些异常是`std :: exception`的子类时.要捕获*所有异常*,只需使用`catch(...)`.见[这里](http://stackoverflow.com/q/315948/478288). (3认同)
  • @JamesLeonard:另外,请注意使用catch-all`catch(...)`通常是一种不好的做法.它只是隐藏程序中的错误,你应该避免使用它.相反,你应该只捕获特定的异常并修复可能导致意外异常抛出的错误. (3认同)