Ish*_*ita 2 c++ exception nullptr language-lawyer rethrow
我有一个代码片段,我用 nullptr 作为参数调用 rethrow_exception。文档说参数应该是非空的,但我想知道,如果我通过 nullptr,行为是未定义的还是已知的?
我每次都变得 bad_exception。但是,此链接表示该行为未定义。
std::string msg;
try
{
std::rethrow_exception(nullptr);
}
catch (std::bad_exception &ex)
{
msg = ex.what();
}
catch (std::exception &ex)
{
msg = ex.what();
}
catch (...)
{
msg = "uncaught exception!";
}
Run Code Online (Sandbox Code Playgroud)
任何人,谁能评论到底发生了什么?
这是未定义的行为。
标准说:
Run Code Online (Sandbox Code Playgroud)[[noreturn]] void rethrow_exception(exception_ptr p);前提条件:
p不是空指针。抛出:
p引用的异常对象。
违反先决条件是 UB ( [res.on.required]/2)。您可能观察到的任何行为都符合标准;C++ 标准对可能发生的事情没有任何限制。所以不要这样做。
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |