如果您有这样的函数调用,哪个级别最适合处理我的抛出?我只是想弹出一条错误信息。
class Test {
void A() {
B();
// try and catch here ?
}
void B() {
C();
// try and catch here ?
}
void C() {
throw 1;
}
}
int main()
{
Test test;
test.A();
// try and catch here ?
return 0;
}
答案 0 :(得分:0)
嗯,这取决于您的实际使用情况。
如果您只想弹出错误消息并终止程序,则根本不应该抓住任何内容。
默认的std::terminate处理程序已经这样做了。
如果您只是想显示错误消息并继续构建,您应该从能够克服错误的级别中捕获,并且可以安全地继续您的程序运行状态。
答案 1 :(得分:0)
当您决定处理异常时,很大程度上取决于设计模式和特定方案,但通常您希望在可以可靠地处理异常后立即处理异常。
如果您没有足够的信息来处理异常,则应该在调用堆栈上抛出更高的异常。一些原因如下:
相反,如果您能够可靠地捕获并处理异常:
调用堆栈上比catch块更高的函数甚至不知道发生了异常
通过避免过度异常抛出,您将获得性能提升
通常更好地设计分离关注点。