1. 為什麼c++引進了異常概念
c語言中處理錯誤的方法有:
終止程式,如assert。但是因為某個函式出錯而讓整個程式終止,這樣使用者是難以接受的
返回錯誤碼,缺陷:需要程式設計師自己去查詢對應的錯誤,維護成本高
c 標準庫中setjmp和longjmp
為了解決c語言這些不太友好的錯誤處理機制,c++才引入了異常,異常也是一種處理錯誤的方法:當乙個函式遇到錯誤時會丟擲異常,讓函式的直接或間接呼叫者去處理
2. 異常的使用
3. 異常的處理流程
因為被丟擲的物件的生命週期是不知道的,所以被丟擲的實際上是異常物件的拷貝
當異常物件被丟擲後,退出當前函式棧,返回到上一層函式當中,依次向下尋找匹配的catch塊
如果找到了匹配的catch塊,則會執行catch塊中的異常處理方法,如果沒有找到,則會向將異常丟擲給上一層函式。特別的,如果main函式中的異常沒有被處理則會報錯
catch(…)可以捕獲任意型別的異常
可以丟擲的派生類物件,使用基類捕獲(實際運用中常採用這種方法)
處理完異常後會跳過其他catch塊執行後面的語句
寫乙個**演示一下:
int
division
(int left,
int right)
return left / right;
}void
func
(int left,
int right)
catch
(std::string &s)
catch(.
..) cout <<
"delete "
<< array << endl;
delete
array;
}int
main()
catch
(std::string s)
catch(.
..)return0;
}
division函式丟擲異常後,func中的catch對該異常進行捕獲,並執行catch語句塊,該語句又丟擲了乙個異常給main函式處理,main函式處理完後程式退出,
在這過程中並沒有釋放array的空間
4. 異常安全
5. 異常規範
函式名 throw(型別表),列出這個函式可能拋擲的所有異常型別
函式的後面接throw(),表示函式不拋異常
若無異常介面宣告,則此函式可以拋擲任何型別的異常
注:即使函式後面接了throw(),函式也可以拋異常,所以這只是一種程式設計規範
C 異常捕獲使用
一.異常 c語言 一般使用函式的返回值來表示是否出錯.c 語言 使用異常機制進行處理 異常語法 1 異常捕獲 trycatch 異常型別 名字 catch 異常型別2 名字2 可以有多個catch 分支 2 異常丟擲 throw 異常物件 異常型別 異常捕獲 void config void 注意 ...
C 異常使用須知
本文翻譯自 相比錯誤 異常為錯誤處理提供了很多便利。這些好處包括 儘管有這些好處,然而大部分人仍然介懷異常的額外開銷而不願意使用。基於異常的實現機制,額外開銷來自兩方面 時間開銷 增加執行時間 和空間開銷 增加可執行檔案和記憶體消耗 在這二者之中,時間開銷更被關注。然而,對於乙個良好的c 異常實現,...
C 異常處理 使用throw引發異常
c 提供了throw語句來引發異常。使用throw語句既可以引發系統異常,也可以引發自定義異常。使用throw語句丟擲異常的語法如下 throw exobject exobject 所要丟擲的異常物件,這個異常物件是派生自system.exception類的類物件。例項 如下 using syste...