是下面的代碼
#include <stdexcept>
int main() {
throw std::runtime_error("foobar");
}
保證產生以下輸出?
terminate called after throwing an instance of 'std::runtime_error'
what(): foobar
fish: Job 1, './a.out' terminated by signal SIGABRT (Abort)
我可以在每個編譯器上依賴這個精確的輸出嗎?我可以依賴該what方法將被呼叫并列印錯誤訊息嗎?
uj5u.com熱心網友回復:
不,不能保證,它未指定是否有任何訊息。從cppreference:
如果一個例外被拋出但未被捕獲,包括逃避初始函式
std::thread、主函式以及任何靜態或執行緒區域物件的建構式或解構式的例外,則std::terminate呼叫。對于未捕獲的例外,是否發生任何堆疊展開是實作定義的。
這里相關的情況是“逃避 [...] 主要功能的例外”。std::terminate但是,可以保證呼叫到。如果您愿意,您可以安裝一個std::terminate_handler來列印自定義訊息。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/435523.html
