c++ - 如果默认功能是重新抛出,为什么要有默认异常捕获?

标签 c++ exception error-handling

在函数 g() 中,注释行 LABEL(默认处理程序)产生与其相同的输出。为什么我们有默认捕获?

#include <iostream>
#include <exception>
using namespace std;

void h() { 
  //throw 1;   //A
  //throw 2.5; //B
  throw 'a'; //C
  //throw "add"; //D
}

void g() { 
  try {
    h();
  }
  catch (int) { cout << "int"; }
  catch (double) { cout << "double"; }
  catch (...) { throw; } //LABEL - commenting this line gives same result
}

void f() {
  try {
    g();
  }
  catch (char) { cout << "Char"; }
  catch (...) { throw; }
}

int main() { //main func
  try {
    f();
  }
  catch (...) { cout << "Unknown"; }
  return 0;
}

为什么需要默认捕获?

最佳答案

对我来说问题不清楚,可以用两种方式解释:

为什么存在默认的捕获机制:其他答案给出了有意义的答案)。

为什么 g 有一个默认的 catchthrow;,我看到了两种可能性:它记录了其他异常已被考虑,而且更容易调试这种情况(通过在其上放置断点)。

关于c++ - 如果默认功能是重新抛出,为什么要有默认异常捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43649789/

相关文章:

c++ - 在 C++ 中为迭代器编写运算符 == 函数

delphi - 如何禁用 Delphi 中的所有异常引发?

php - PHP的MD5哈希函数返回500内部错误

javascript - 防止 Javascript 无错调用 Typescript

python os.rename ""当文件已经存在时无法创建文件

c++ - EXC_BAD_ACCESS(code=1, address=0x0) 在将 std::map 作为参数传递给虚函数调用时发生

c++ - 参数未在函数 C++ 中使用

c++ - Qt 扩展我自己的小部件

c# - 使用 P/Invoke 在托管和非托管回调链上引发异常

python - Django - 异常类型 : NoReverseMatch