簡體   English   中英

std::rethrow_exception(nullptr) 未定義行為還是 bad_exception?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM