我正在做一個小的錯誤處理系統,我想做一個致命的錯誤,終止程序。我想到兩個辦法做到這一點:可以拋出一個noreturn noexcept函數而不是調用std :: terminate嗎?
[[noreturn]] inline void fatal_error1(char const* msg) {
std::terminate();
}
[[noreturn]] inline void fatal_error2(char const* msg) noexcept {
throw std::runtime_error{msg};
}
有沒有使用,爲什麼會fatal_error2
不推薦理由嗎?該功能的目標是終止程序,我甚至將其標記爲noreturn,但每個人似乎都告訴我不要拋出noexcept函數。
我很想使用fatal_error2
,因爲它在終端輸出what()
,而我需要在該標頭中包含一些輸出功能來打印fatal_error1
中的消息。
std :: terminate()方法有問題嗎?如果不是,你爲什麼要尋找替代品? – Borgleader
第二種方法不推薦,因爲它與第一種方法相同,但不是明顯的方式。 – StoryTeller
@Borgleader well ...在第一個版本中,我必須包含'iostream'來輸出一個錯誤,而在大多數系統中異常版本輸出'what()'。這可能不是選擇'fatal_error2'的最好理由,但是這個錯誤處理函數在我的程序中很多地方都會用到,而且我不想在所有地方都包含'iostream',甚至不需要'stdio '。 –