C 之異常處理學習筆記

2021-07-02 02:29:44 字數 1293 閱讀 1288

throw語句用於將異常物件丟擲,throw語句將異常丟擲,如果在當前函式中沒有try … catch語句能夠處理該異常,則當前函式將立即返回。

異常被傳遞到上層呼叫函式,仍然需要try … catch語句進行處理,如果上層函式也沒有能力處理該異常,則異常繼續向更上層函式的函式傳遞。

如果在函式呼叫棧中的所有函式都無法處理丟擲的異常,則程式異常終止。

例如:int test(int i)

if( i == 1 )

throw -1;

if( i == 2 )

throw "error";

if( i == 3 )

throw 0.5;

if( i == 4 )

throw 'd';

return i;

在使用時:

for(int i=0; i<5; i++)

trycout根據丟擲的型別決定怎樣異常處理

cout<<"int: "cout<<"const char*: "cout<<"double: "try catch

語句也是可以巢狀的,在

catch(…)

語句塊中,可以通過不帶引數的

throw

語句丟擲捕獲的異常。

不要在建構函式中丟擲異常,在建構函式可能申請系統資源,而在建構函式中丟擲異常會導致物件構造不完全。不完全物件的析構函式是不會被呼叫的,因此可能造成資源洩漏。

在工程中可以使用標準庫中的異常類,可以將標準庫中的異常類作為基類派生新的異常類,標準庫中的異常都是從exception類派生的。exception類有兩個主要的分支,logic_error用於描述程式中出現的邏輯錯誤,比如,傳遞無效引數,,,runtime_error用於描述無法預料的事件所造成的,如:記憶體耗盡、硬體錯誤。

logic_error 和runtime_error都提供了乙個引數為字串的建構函式,這樣就可以保持錯誤資訊。通過what()成員函式就可以得到錯誤的資訊。

例如;classdivide_by_zero : public logic_error

public:

divide_by_zero(const char* s) :logic_error(s)

doublediv(double a, double b)

if((-0.00000001 < b) && ( b < 0.00000001) )

throw divide_by_zero("divide byzero...");

return a / b;

使用時:

trycoutcout<

異常處理學習筆記

arm處理器的工作模式 使用者模式user 快速中斷模式fiq 處部中斷模式irq 特權模式supervisor 資料訪問中止模式abort 未定義指令中止模式undefined 系統模式system 1一上電,cpu處於 supervisor svc 管理模式 2發生中斷,cpu進入 riq 外部...

異常處理學習筆記

arm處理器的工作模式 使用者模式 user 快速中斷模式 fiq 處部中斷模式 irq 特權模式supervisor 資料訪問中止模式 abort 未定義指令中止模式 undefined 系統模式 system 1 一上電,cpu處於 supervisor svc 管理模式 2 發生中斷,cpu進...

c的異常處理學習

如題,源於對博主bigloomy的學習 先看 include include jmp buf buf void error code void int main else printf 出現錯誤除數為0 n 發現 執行流被改變了,真是神奇 看看維基百科怎麼解釋的 setjmp.h 是c標準函式庫 中...