捕获多个异常

Catch multiple exceptions

本文关键字:异常      更新时间:2023-10-16

如何一次catch多个异常?

我的意思是,如果我得到std::out_of_rangestd::invalid_argument,我必须做A,如果我得到std::runtime_errorstd::bad_alloc,我必须做B

。这是一个例子...在某些情况下,我有超过 5 个例外,这使我达到相同的点。

我只是希望我不必多次复制粘贴相同的代码!

你不复制粘贴,你把代码放在函数中,并在多种情况下调用函数。

方法如下:

try {
/* Stuff */
} catch (const std::out_of_range&) {
do_A();
} catch (const std::invalid_argument&) {
do_A();
} catch (const std::runtime_error&) {
do_B();
} catch (const std::bad_alloc&) {
do_B();
}

如果你需要在多个位置进行相同的异常处理,你可以把它放到一个函数中,如下所示:

void handle_exception() {
try {
throw; // re-throw the original exception our caller caught, so we can catch and handle specific ones.
} catch (const std::out_of_range&) {
do_A();
} catch (const std::invalid_argument&) {
do_A();
} catch (const std::runtime_error&) {
do_B();
} catch (const std::bad_alloc&) {
do_B();
}
}

然后,在多个地方,你可以做

try {
/* Stuff */
} catch (...) {
handle_exception();
}