首先:
你不想那样做。
异常并不意味着处理错误,而是运行时错误条件,使您的函数无法满足它必须调用的其他函数的先决条件,或履行其自身后置条件的承诺(假设调用者已满足前置条件)。例如,参见Herb Sutter 的这篇文章。
永远不要写这样的东西:
try
{
//bug condition <== NO! Exceptions are not meant to handle bugs
}
catch()
{
//Remove file
}
反而:
assert( /* bug condition... */ );
回到问题:
您的程序具有未定义的行为,并且很可能在您这样做时根本不会抛出任何异常:
char TempArray[10];
char c = TempArray[11];
因此,捕获所有异常将无济于事。这是一个错误,即编程错误,您是否应该以将控制转移到有错误的例程的方式处理错误是有争议的。此外,如果您承认程序中存在错误,您就不能将控制权转移给有错误的处理程序吗?这可能会使情况变得更糟。
应该通过防止它们、利用断言、可能采用诸如测试驱动开发之类的方法来处理错误。
这就是说,关于捕获所有异常的方法,您可以执行以下操作:
try
{
// ...
}
catch (...) // <== THIS WILL CATCH ANY EXCEPTION
{
}
但是catch (...)
不鼓励使用作为设计指南,因为它很容易导致吞下本应处理的错误条件而忘记它们。毕竟,异常的发明正是为了防止程序员忘记检查错误代码,并使catch (...)
之变得如此简单。
出于包罗万象的目的,最好让所有异常都派生自std::exception
,然后执行以下操作:
try
{
// ...
}
catch (std::exception& e)
{
// Do something with e...
}