如果你寫的方法是給他人使用,那麼,如果這個方法失敗,最好是以拋異常的方式告訴別人,而不是在方法宣告的地方寫注釋:「0:成功,1:網路連線失敗,3:引數錯誤」。
throw 1; //丟擲 int 型別異常
throw 1.2; //丟擲 double 型別異常
throw "err"; //丟擲 const char* 型別異常
throw exception(); //丟擲 exception 型別異常
try
catch (type e1)
catch (...)
異常規格說明的目的是為了讓使用者知道函式可能會丟擲哪些異常。但也僅僅是說明而已,不會限定函式只能丟擲int型別的異常。
在函式後加throw
1、在函式的宣告後加上 throw(type1, type2, …),表示這個函式可能丟擲type1、type2等型別的異常。
2、在函式的宣告後加上 throw(),表示這個函式不會拋任何異常。
3、在函式的宣告後不加 throw,表示這個函式可能丟擲任何型別的異常。
再次強調,異常規格說明僅僅是說明而已!即使給乙個函式後加上throw(),如果這個函式丟擲異常,也可以捕捉到!
c++ 提供了一系列標準的異常類,如std::logic_error、std::runtime_error等。但這些標準異常類都繼承了exception。
下面詳細了解exception這個類。
class exception
//有參建構函式,重要。這個傳入的字串就是對這個異常的說明。
explicit exception(char const* const _message) throw()
: _data()
; __std_exception_copy(&_initdata, &_data);
} //有參建構函式,重要。這個傳入的字串就是對這個異常的說明。int型引數貌似沒用!
exception(char const* const _message, int) throw()
: _data()
//拷貝建構函式,不需關注。
exception(exception const& _other) throw()
//賦值建構函式,不需關注。
exception& operator=(exception const& _other) throw()
//析構函式,不需關注。
virtual ~exception() throw()
//返回異常說明,重要。
virtual char const* what() const
private:
//結構體物件,結構體有兩個成員 char const* _what(異常說明); bool _dofree(這個有什麼用?);
__std_exception_data _data;
};
預想是通過函式,連續拋兩個異常。結果,只有第乙個異常成功丟擲。
**
#include #include using namespace std;
void throwexception() throw()
int main()
catch (exception& e)
catch (...)
getchar();
return 0;
}
輸出
cout e1
catch exception my exception1
C 異常處理
結構化異常 structured exception vs c 異常 c exception 大家都知道c 異常是c 語言的乙個特性,使用者可以使用throw的方式來丟擲異常,try catch 來捕獲異常。結構化異常是諸如,zero divided,access violations等異常,這些異...
c 異常處理
一 概述 c 自身有著非常強的糾錯能力,發展到如今,已經建立了比較完善的異常處理機制。c 的異常情況無非兩種,一種是語法錯誤,即程式中出現了錯誤的語句,函式,結構和類,致使編譯程式無法進行。另一種是執行時發生的錯誤,一般與演算法有關。關於語法錯誤,不必多說,寫 時心細一點就可以解決。c 編譯器的報錯...
C 異常處理
程式設計師常常忽視異常處理的重要性,這給他們自己的 造成相當大損害。本文將討論如何在c 中使用異常處理,並介紹在應用 中新增 片段以防止某些錯誤的一些簡單方法,這些錯誤可能導致程式異常終止。結構化異常處理 net框架提供一種標準的錯誤報告機制稱為結構化異常處理。這種機制依賴於應用中報告錯誤的異常。在...