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