gpt4 book ai didi

c++ - 单个 "throw;"语句有什么作用?

转载 作者:IT老高 更新时间:2023-10-28 13:58:12 27 4
gpt4 key购买 nike

这些天,我读了很多 C++ F.A.Q尤其是 this page .

通读该部分,我发现了一种“技术”,作者称之为“异常调度程序”,它允许某人将他所有的异常处理分组到一个方便的函数中:

void handleException()
{
try {
throw; // ?!
}
catch (MyException& e) {
//...code to handle MyException...
}
catch (YourException& e) {
//...code to handle YourException...
}
}

void f()
{
try {
//...something that might throw...
}
catch (...) {
handleException();
}
}

困扰我的是单个 throw; 语句:如果您考虑给定的示例,那么可以肯定,它的作用很明显:它重新抛出首先在 f()< 中捕获的异常 并再次处理它。

但是,如果我直接调用 handleException() 而不是从 catch() 子句中调用它会怎样?是否有任何指定的行为?

除了加分之外,还有其他你知道的 throw 的“奇怪”(可能不是好词)用法吗?

谢谢。

最佳答案

如果您自己执行 throw;,并且当前没有异常可以重新抛出,则程序会突然结束。 (更具体地说,调用 terminate()。)

注意 throw ;是重新抛出当前异常的唯一安全方法 - 它不等同于

catch (exception const & e) { throw e; }

关于c++ - 单个 "throw;"语句有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5378677/

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