gpt4 book ai didi

c++ - 当飞行中出现多个异常时会发生什么,如何捕捉它们?

转载 作者:行者123 更新时间:2023-11-30 01:33:05 25 4
gpt4 key购买 nike

我希望我能说得更明确一些,但是有很多可能的情况,其中有几个正在运行的异常——所有都涉及析构函数,但仍然如此。

C++98 到 C++17 的行为有何不同?

我敢预言“飞行中有几个异常就没有办法捕捉”。

最佳答案

您可能会阅读 throw 的文档.

If any function that is called directly by the stack unwinding mechanism, after initialization of the exception object and before the start of the exception handler, exits with an exception, std::terminate is called. Such functions include destructors of objects with automatic storage duration whose scopes are exited, and the copy constructor of the exception object that is called (if not elided) to initialize catch-by-value arguments.

因此 std::terminate 被调用而不是 “飞行中的几个异常”

你可能还有几个异常,只要它们不退出各自的函数:

void foo()
{
struct S
{
~S()
{
try {
throw std::runtime_error("in S");
} catch (const std::exception& ex) {
std::err << ex.what(); // "in S"
}
}
} s;

throw std::runtime_error("In Foo");
}

关于c++ - 当飞行中出现多个异常时会发生什么,如何捕捉它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59137374/

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