C 異常處理

2021-08-30 17:32:04 字數 1961 閱讀 7032

如果你寫的方法是給他人使用,那麼,如果這個方法失敗,最好是以拋異常的方式告訴別人,而不是在方法宣告的地方寫注釋:「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框架提供一種標準的錯誤報告機制稱為結構化異常處理。這種機制依賴於應用中報告錯誤的異常。在...