您好,登錄后才能下訂單哦!
我們都知道,無論是在C語言中還是C++的編程調試中,我們都會遇到各種各樣的錯誤,那么在遇到這些錯誤的時候我們要怎么處理它們呢?
這里有一些傳統的處理錯誤的方法:
①終止錯誤
②返回錯誤碼
③返回合法值,讓程序處于某種錯誤狀態,
④調用一個預先設置好的處理錯誤的函數--->(回調函數)
為了更好地處理這一類問題,在C++中提出了異常,當函數出現一個自己無法處理的錯誤時,就會拋出異常,讓函數的調用者直接或間接的來處理這個問題。
來舉一個例子:
例1:
對于函數div來說,程序沒有一種機制來處理當num2為零時的情況,所以我們可以通過拋出異常來解決這個問題
注意:當throw出異常的時候,后面括號里的參數一定要和catch后面括號里的數據類型匹配
例2:下面再來舉一個例子
從上面的代碼可以看出,由于一旦拋出異常,就要進行捕獲,所以在拋出異常的同時也不可避免的影響了代碼的執行流,也就是代碼不一定就順序執行了,因此在拋出異常之前,如果有malloc或new開辟的空間時,一定要在執行流改變之前將其釋放,否則就會出現內存泄漏的問題。
通過以上兩個例子,我想大家一定能夠對異常有一定的了解了吧,下面我來對異常做幾點總結:
①異常是通過拋出對象引發的,該對象的類型取決了激活哪一類的異常
②被選中的異常處理代碼是調用鏈中拋出對象類型相同的最近一個開始的
③拋出異常會釋放局部存儲對象,被拋出的對象也還給了系統,異常對象在catch處理后也還給了系統
Tips:
異常捕獲的匹配規則
1.允許非const到const的轉換,也就是const可以接受匹配非const
2.允許派生類型到基類的轉換(父類的指針或引用可以指向或引用一個子類,將其作為接受的類型)
3.將數組轉換為一個指向數組類型的指針,將函數轉換為函數指針類型
注意事項
一般不要在析構函數或構造函數中拋出異常
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。