習慣了在 js 中寫 try catch 語句,所以在c++**中瞎寫。。杯具。我對c++的了解太少了。
1.在c++中,很多錯誤是try{}catch{}捕獲不到的,比如空指標訪問,野指標訪問等,程式都直接崩潰,不會讓你捕獲的。所以,很遺憾,我慣用try catch,並沒有達到預期。
2. 絕大多數 windows api 在執行時也並不丟擲異常,直接掛掉。還是要對每乙個問題做其相應的處理,才不至於掛掉。
3. 但可考慮用 getlasterror 獲取錯誤資訊。
4. 另,考慮到效能問題:
在c++程式中,try {} catch{} 是有代價的。
每乙個try {} catch{} 都會降低執行效率。增加檔案大小。
故此,不可濫用try {} catch{} ,只有那些不能明確捕捉的錯誤才應用try {} catch{} ,比如io錯誤。
能通過返回值或者其他方式檢查的錯誤,絕對不要用try {} catch{} 。
但是在c#,vb.net等語言中,try {} catch{} 雖然同樣不可濫用,
但 不會像c++一樣增加檔案大小。這與c++語言對於try {} catch{} 的實現有關。
附解析:
引用兩處參考:more effective c++: item 15 "understand the costs of exceptionhandling" 以及 clr via c#(2nd) chapter 19 : exceptions
簡單地說,c++中處理異常時,需要記錄一些資訊,如哪些物件已經成功構造,丟擲異常
時哪些物件的析構函式需要呼叫。記錄這些資訊是乙個不小的開銷,同時編譯器也會產
生一些code完成這些任務,因此程式尺寸也會增加。
對於managed code, 物件的生命期由gc管理,因此處理異常時,bookkeeping的任務減輕
了很多,因此效率會高一些。但因為相同的managed code經jit編譯後在不同的平台上(
x86, x64或ia64)差異很大,exception的開銷也就難以一言概之,需要在不同的平台上
測試才能知道效能的損失。
回去補課。。
關於try catch 的一些總結
程式要健壯,必須要設計報錯機制。而try catch 就是一種報錯機制。優點 程式執行報錯就會終止,而try catch 為了丟擲執行時的異常,使程式能夠正常執行。1 結構 trycatch 2 try catch的執行順序 先執行try 中的 從try 中第一行開始執行,當出現異常,jvm就會建立...
C 中的一些定義
ps 這篇部落格用來記錄一些一般的c 書中草草掠過的一些概念。或者一些不太容易理解的概念的詳細解釋。歡迎新手進入,歡迎高手指正!orz 引用 為物件起了另外乙個名字,引用型別引用 refers to 另外一種型別。int ival 1024 int refval ival int i 報錯。一般在初...
c 中try catch的用法
在c 中,可以直接丟擲異常之後自己進行捕捉處理,如 這樣就可以在任何自己得到不想要的結果的時候進行中斷,比如在進行資料庫事務操作的時候,如果某乙個語句返回sql error則直接丟擲異常,在catch塊中進行事務回滾 include include using namespace std int m...