我們都知道,無論是在C語言中還是C++的編程調(diào)試中,我們都會(huì)遇到各種各樣的錯(cuò)誤,那么在遇到這些錯(cuò)誤的時(shí)候我們要怎么處理它們呢?
成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作介紹好的網(wǎng)站是理念、設(shè)計(jì)和技術(shù)的結(jié)合。成都創(chuàng)新互聯(lián)公司擁有的網(wǎng)站設(shè)計(jì)理念、多方位的設(shè)計(jì)風(fēng)格、經(jīng)驗(yàn)豐富的設(shè)計(jì)團(tuán)隊(duì)。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營(yíng)銷思維進(jìn)行網(wǎng)站設(shè)計(jì)、采用先進(jìn)技術(shù)開源代碼、注重用戶體驗(yàn)與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。
這里有一些傳統(tǒng)的處理錯(cuò)誤的方法:
①終止錯(cuò)誤
②返回錯(cuò)誤碼
③返回合法值,讓程序處于某種錯(cuò)誤狀態(tài),
④調(diào)用一個(gè)預(yù)先設(shè)置好的處理錯(cuò)誤的函數(shù)--->(回調(diào)函數(shù))
為了更好地處理這一類問題,在C++中提出了異常,當(dāng)函數(shù)出現(xiàn)一個(gè)自己無法處理的錯(cuò)誤時(shí),就會(huì)拋出異常,讓函數(shù)的調(diào)用者直接或間接的來處理這個(gè)問題。
來舉一個(gè)例子:
例1:
對(duì)于函數(shù)div來說,程序沒有一種機(jī)制來處理當(dāng)num2為零時(shí)的情況,所以我們可以通過拋出異常來解決這個(gè)問題
注意:當(dāng)throw出異常的時(shí)候,后面括號(hào)里的參數(shù)一定要和catch后面括號(hào)里的數(shù)據(jù)類型匹配
例2:下面再來舉一個(gè)例子
從上面的代碼可以看出,由于一旦拋出異常,就要進(jìn)行捕獲,所以在拋出異常的同時(shí)也不可避免的影響了代碼的執(zhí)行流,也就是代碼不一定就順序執(zhí)行了,因此在拋出異常之前,如果有malloc或new開辟的空間時(shí),一定要在執(zhí)行流改變之前將其釋放,否則就會(huì)出現(xiàn)內(nèi)存泄漏的問題。
通過以上兩個(gè)例子,我想大家一定能夠?qū)Ξ惓S幸欢ǖ牧私饬税?,下面我來?duì)異常做幾點(diǎn)總結(jié):
①異常是通過拋出對(duì)象引發(fā)的,該對(duì)象的類型取決了激活哪一類的異常
②被選中的異常處理代碼是調(diào)用鏈中拋出對(duì)象類型相同的最近一個(gè)開始的
③拋出異常會(huì)釋放局部存儲(chǔ)對(duì)象,被拋出的對(duì)象也還給了系統(tǒng),異常對(duì)象在catch處理后也還給了系統(tǒng)
Tips:
異常捕獲的匹配規(guī)則
1.允許非const到const的轉(zhuǎn)換,也就是const可以接受匹配非const
2.允許派生類型到基類的轉(zhuǎn)換(父類的指針或引用可以指向或引用一個(gè)子類,將其作為接受的類型)
3.將數(shù)組轉(zhuǎn)換為一個(gè)指向數(shù)組類型的指針,將函數(shù)轉(zhuǎn)換為函數(shù)指針類型
注意事項(xiàng)
一般不要在析構(gòu)函數(shù)或構(gòu)造函數(shù)中拋出異常