gpt4 book ai didi

c++ - 没有参数的 C++ throw 会在另一个框架内工作以重新抛出异常吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:57 27 4
gpt4 key购买 nike

如果我有如下代码:

try {
doSomething();
} catch (...) {
noteError();
}

void noteError() {
try {
throw;
} catch (std::exception &err) {
std::cerr << "Note known error here: " << err.what();
} catch (...) {
std::cerr << "Note unknown error here.";
}
throw;
}

noteError() 下部框架内的两个地方都会抛出原始异常吗?

最佳答案

您的原始代码很好。您捕获了不同的异常类型并调用了一个函数来记录一条消息并重新抛出。 throw 语句不需要直接出现在相应的 catch block 中。但是,如果您调用其中一个“注释”函数并且您没有当前正在处理异常,那么您的程序将调用terminate()

您的新代码也没有问题。捕获所有内容然后调用另一个重新抛出的函数以转到更具体的处理程序是可以的。那是 the exception dispatcher idiom described in the C++ FAQ .在调度 block 完成后 重新抛出异常看起来有点奇怪,但是如果在 noteError 返回(内部原始的 catch block )而不是现在的位置,那么它将是非常普通的;它在标准 §15.1/6 中得到了证明。

关于c++ - 没有参数的 C++ throw 会在另一个框架内工作以重新抛出异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3561571/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com