我想在我的异常处理程序中执行的代码本身可能会抛出异常。
以下结构在C++中是否合法?如果是,有没有什么缺陷?
try
{
// ...
}
catch (const E&)
{
try
{
// ...
}
catch (const F&)
{
}
}
实际上,甚至有一种有趣的技巧可以使用嵌套的try/catch块:假设您有多个需要有效处理相同异常的函数。特别是在包装另一个接口时,这是常见的情况。在这种情况下,可以捕获所有异常,从异常处理程序调用一个函数,并在该函数中重新引发异常以实现实际的异常处理:
void fancy_handler() {
try {
throw; // assumes that fancy_handler() is called from catch-clause
} catch (std::runtime_error const& rt) {
std::cout << "runtime-error: " << ex.what() << "\n";
} catch (std::exception const& ex) {
std::cout << "excption: " << ex.what() << "\n";
} catch (...) {
std::cout << "unknown exception\n";
}
}
void foo() { try { do_foo(); } catch (...) { fancy_handler(); } }
void bar() { try { do_bar(); } catch (...) { fancy_handler(); } }
我只是喜欢避免重复的[非平凡]代码!
不,没有任何不利因素。这是你应该采取的方式。
throw
吗?我从未见过这样的事情! - Mooing Duckint main() {fancy_handler();}
。 - Mooing Duck