[英]std::rethrow_exception(nullptr) undefined behavior or bad_exception?
我有一個代碼片段,我用 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!";
}
任何人,誰能評論到底發生了什么?
這是未定義的行為。
標准說:
[[noreturn]] void rethrow_exception(exception_ptr p);
先決條件:
p
不是空指針。拋出:
p
所指的異常對象。
違反先決條件是 UB ( [res.on.required]/2
)。 您可能觀察到的任何行為都符合標准; C++ 標准對可能發生的事情沒有任何限制。 所以不要這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.