異常是程序可能檢測(cè)到的運(yùn)行時(shí)刻不正常的情況刑然,最常見(jiàn)的異常包括:
除數(shù)為0寺擂、數(shù)組越界訪問(wèn)、磁盤(pán)或者光盤(pán)讀寫(xiě)失敗、無(wú)效的輸入數(shù)據(jù)沽讹、內(nèi)存耗盡、計(jì)算機(jī)網(wǎng)絡(luò)不通武鲁、打印機(jī)未開(kāi)等爽雄。異常總是意味著不該發(fā)生的事發(fā)生了沐鼠,在程序設(shè)計(jì)過(guò)程中應(yīng)該預(yù)料會(huì)發(fā)生何種異常挚瘟,并進(jìn)行必要的處理。
在程序運(yùn)行階段由于系統(tǒng)異常而產(chǎn)生的錯(cuò)誤為異常錯(cuò)誤饲梭。異常錯(cuò)誤與程序設(shè)計(jì)錯(cuò)誤是兩碼事乘盖,程序設(shè)計(jì)錯(cuò)誤是指程序員在設(shè)計(jì)程序時(shí)由于人為因素而導(dǎo)致的錯(cuò)誤;異常錯(cuò)誤是指程序運(yùn)行時(shí)由于系統(tǒng)異常而產(chǎn)生的憔涉,不是程序員的錯(cuò)誤订框。
如果是程序員的設(shè)計(jì)出錯(cuò)誤了,程序就不能通過(guò)編譯檢查或者運(yùn)行結(jié)果不對(duì)兜叨;
如果是異常錯(cuò)誤穿扳,程序執(zhí)行時(shí)遇到異常情況就會(huì)突然終止或失控,使用戶感到莫名其妙国旷。
我們現(xiàn)在編寫(xiě)的代碼都只是練習(xí)一下基礎(chǔ)矛物,所以感覺(jué)在程序設(shè)計(jì)中不寫(xiě)異常處理也沒(méi)啥,但是在以后工作開(kāi)發(fā)項(xiàng)目時(shí)可能會(huì)寫(xiě)大量的代碼跪但,這時(shí)異常處理至關(guān)重要履羞。
接下來(lái)說(shuō)一下C++中的異常錯(cuò)誤吧,異常處理由3個(gè)關(guān)鍵字try throw catch 實(shí)現(xiàn)屡久,是不是感覺(jué)和js中的異常處理有點(diǎn)像啊忆首,
下面的程序主要用來(lái)處理除數(shù)為0的異常錯(cuò)誤:
#include <iostream>
using namespace std;
int main() {
int m,n;
cout<<"Please input two integers:";
cin>>m>>n;
try{//在try代碼塊中包含需要監(jiān)控的程序部分
if (n==0)
throw 0;
cout<< (m/n)<<endl;
}
catch(int){//catch 語(yǔ)句捕獲一個(gè)整型異常
cout<<"Divided by 0!";
return -1;
}
}
下面的程序主要是處理從函數(shù)內(nèi)部拋出的異常信 息
#include <iostream>
?using namespace std;
int division(int x, int y);
int main( ) {
int m,n;
cout<<"Please input two integers:";
cin>>m>>n;
try {
cout<<division(m,n)<<endl;
}
catch(int ){
cout<<"divided by 0"<<endl;
return -1;
}
return 0;
}
int division (int x, int y){
if(y == 0)
throw 0;
return (x/y);
}
下面的程序是用戶自定義運(yùn)行終止函數(shù)
#include<iostream>
using namespace std;
void myterm() //自定義的運(yùn)行終止函數(shù) {
cout<<"This is my terminater."<<endl;
exit(1);
}
int main() {
try{
set_terminate(myterm);
throw "Exception ... ";
}
catch(int i){}
return 0;
}
如果在程序中拋出了一個(gè)未被處理的異常信息,系統(tǒng)將調(diào)用C++標(biāo)準(zhǔn)庫(kù)中的terminate()函數(shù)被环。默認(rèn)情況下雄卷,terminate()函數(shù)將調(diào)用abort()函數(shù)來(lái)終止程序。
程序員也可以自己編寫(xiě)終止函數(shù)蛤售,然后通過(guò)set_terminate()函數(shù)傳遞給異常處理模塊丁鹉,使系統(tǒng)在找不到相匹配的異常錯(cuò)誤處理模塊時(shí)調(diào)用該函數(shù),在函數(shù)內(nèi)部一般是執(zhí)行必要的清除工作悴能,釋放程序中申請(qǐng)的動(dòng)態(tài)資源揣钦,然后調(diào)用exit()函數(shù)終止當(dāng)前程序。