在函数 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
有一个默认的 catch
和 throw;
,我看到了两种可能性:它记录了其他异常已被考虑,而且更容易调试这种情况(通过在其上放置断点)。
关于c++ - 如果默认功能是重新抛出,为什么要有默认异常捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43649789/