新聞中心
我們都知道,無論是在C語言中還是C++的編程調(diào)試中,我們都會遇到各種各樣的錯誤,那么在遇到這些錯誤的時候我們要怎么處理它們呢?
創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網(wǎng)站建設、網(wǎng)站設計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的邢臺網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!這里有一些傳統(tǒng)的處理錯誤的方法:
①終止錯誤
②返回錯誤碼
③返回合法值,讓程序處于某種錯誤狀態(tài),
④調(diào)用一個預先設置好的處理錯誤的函數(shù)--->(回調(diào)函數(shù))
為了更好地處理這一類問題,在C++中提出了異常,當函數(shù)出現(xiàn)一個自己無法處理的錯誤時,就會拋出異常,讓函數(shù)的調(diào)用者直接或間接的來處理這個問題。
來舉一個例子:
例1:
對于函數(shù)div來說,程序沒有一種機制來處理當num2為零時的情況,所以我們可以通過拋出異常來解決這個問題
注意:當throw出異常的時候,后面括號里的參數(shù)一定要和catch后面括號里的數(shù)據(jù)類型匹配
例2:下面再來舉一個例子
從上面的代碼可以看出,由于一旦拋出異常,就要進行捕獲,所以在拋出異常的同時也不可避免的影響了代碼的執(zhí)行流,也就是代碼不一定就順序執(zhí)行了,因此在拋出異常之前,如果有malloc或new開辟的空間時,一定要在執(zhí)行流改變之前將其釋放,否則就會出現(xiàn)內(nèi)存泄漏的問題。
通過以上兩個例子,我想大家一定能夠?qū)Ξ惓S幸欢ǖ牧私饬税?,下面我來對異常做幾點總結:
①異常是通過拋出對象引發(fā)的,該對象的類型取決了激活哪一類的異常
②被選中的異常處理代碼是調(diào)用鏈中拋出對象類型相同的最近一個開始的
③拋出異常會釋放局部存儲對象,被拋出的對象也還給了系統(tǒng),異常對象在catch處理后也還給了系統(tǒng)
Tips:
異常捕獲的匹配規(guī)則
1.允許非const到const的轉(zhuǎn)換,也就是const可以接受匹配非const
2.允許派生類型到基類的轉(zhuǎn)換(父類的指針或引用可以指向或引用一個子類,將其作為接受的類型)
3.將數(shù)組轉(zhuǎn)換為一個指向數(shù)組類型的指針,將函數(shù)轉(zhuǎn)換為函數(shù)指針類型
注意事項
一般不要在析構函數(shù)或構造函數(shù)中拋出異常
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網(wǎng)站標題:C++中的異常淺析-創(chuàng)新互聯(lián)
本文地址:http://fisionsoft.com.cn/article/cshpgo.html