c++異常如何處理-創(chuàng)新互聯(lián)

這篇文章主要介紹了c++異常如何處理,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

超過十余年行業(yè)經(jīng)驗(yàn),技術(shù)領(lǐng)先,服務(wù)至上的經(jīng)營模式,全靠網(wǎng)絡(luò)和口碑獲得客戶,為自己降低成本,也就是為客戶降低成本。到目前業(yè)務(wù)范圍包括了:做網(wǎng)站、成都網(wǎng)站設(shè)計(jì),成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡(luò)托管,小程序制作,微信開發(fā),APP應(yīng)用開發(fā),同時(shí)也可以讓客戶的網(wǎng)站和網(wǎng)絡(luò)營銷和我們一樣獲得訂單和生意!

c++異常處理

程序運(yùn)行時(shí)常會(huì)碰到一些異常情況,例如:做除法的時(shí)候除數(shù)為 0;用戶輸入年齡時(shí)輸入了一個(gè)負(fù)數(shù);用 new 運(yùn)算符動(dòng)態(tài)分配空間時(shí),空間不夠?qū)е聼o法分配;訪問數(shù)組元素時(shí),下標(biāo)越界;打開文件讀取時(shí),文件不存在等等。

這些異常情況,如果不能發(fā)現(xiàn)并加以處理,很可能會(huì)導(dǎo)致程序崩潰。

所謂“處理”,可以是給出錯(cuò)誤提示信息,然后讓程序沿一條不會(huì)出錯(cuò)的路徑繼續(xù)執(zhí)行;也可能是不得不結(jié)束程序,但在結(jié)束前做一些必要的工作,如將內(nèi)存中的數(shù)據(jù)寫入文件、關(guān)閉打開的文件、釋放動(dòng)態(tài)分配的內(nèi)存空間等。

C++ 引入了異常處理機(jī)制。其基本思想是:函數(shù) A 在執(zhí)行過程中發(fā)現(xiàn)異常時(shí)可以不加處理,而只是“拋出一個(gè)異常”給 A 的調(diào)用者,假定為函數(shù) B。

拋出異常而不加處理會(huì)導(dǎo)致函數(shù) A 立即中止,在這種情況下,函數(shù) B 可以選擇捕獲 A 拋出的異常進(jìn)行處理,也可以選擇置之不理。如果置之不理,這個(gè)異常就會(huì)被拋給 B 的調(diào)用者,以此類推。

如果一層層的函數(shù)都不處理異常,異常最終會(huì)被拋給最外層的 main 函數(shù)。main 函數(shù)應(yīng)該處理異常。如果main函數(shù)也不處理異常,那么程序就會(huì)立即異常地中止。

C++異常處理基本語法

C++ 通過 throw 語句和 try...catch 語句實(shí)現(xiàn)對異常的處理。throw 語句的語法如下:

throw  表達(dá)式;

該語句拋出一個(gè)異常。異常是一個(gè)表達(dá)式,其值的類型可以是基本類型,也可以是類。

try...catch 語句的語法如下:
try {
    語句組
}catch(異常類型) {
  異常處理代碼
}...catch(異常類型) {
    異常處理代碼
}

catch 可以有多個(gè),但至少要有一個(gè)。

不妨把 try 和其后{}中的內(nèi)容稱作“try塊”,把 catch 和其后{}中的內(nèi)容稱作“catch塊”

try...catch 語句的執(zhí)行過程是:執(zhí)行 try 塊中的語句,如果執(zhí)行的過程中沒有異常拋出,那么執(zhí)行完后就執(zhí)行最后一個(gè) catch 塊后面的語句,所有 catch 塊中的語句都不會(huì)被執(zhí)行;如果 try 塊執(zhí)行的過程中拋出了異常,那么拋出異常后立即跳轉(zhuǎn)到第一個(gè)“異常類型”和拋出的異常類型匹配的 catch 塊中執(zhí)行(稱作異常被該 catch 塊“捕獲”),執(zhí)行完后再跳轉(zhuǎn)到最后一個(gè) catch 塊后面繼續(xù)執(zhí)行。

例如下面的程序:

#include <iostream>
using namespace std;
int main()
{
    double m ,n;
    cin >> m >> n;
    try {
        cout << "before dividing." << endl;
        if( n == 0)
            throw -1; //拋出int類型異常
        else
            cout << m / n << endl;
        cout << "after dividing." << endl;
    }
    catch(double d) {
        cout << "catch(double) " << d <<  endl;
    }
    catch(int e) {
        cout << "catch(int) " << e << endl;
    }
    cout << "finished" << endl;
    return 0;
}

程序的運(yùn)行結(jié)果如下:

9 6↙
before dividing.
1.5
after dividing.
finished

說明當(dāng) n 不為 0 時(shí),try 塊中不會(huì)拋出異常。因此程序在 try 塊正常執(zhí)行完后,越過所有的 catch 塊繼續(xù)執(zhí)行,catch 塊一個(gè)也不會(huì)執(zhí)行。

程序的運(yùn)行結(jié)果也可能如下:

9 0↙
before dividing.
catch\(int) -1
finished

當(dāng) n 為 0 時(shí),try 塊中會(huì)拋出一個(gè)整型異常。拋出異常后,try 塊立即停止執(zhí)行。該整型異常會(huì)被類型匹配的第一個(gè) catch 塊捕獲,即進(jìn)入catch(int e)塊執(zhí)行,該 catch 塊執(zhí)行完畢后,程序繼續(xù)往后執(zhí)行,直到正常結(jié)束。

如果拋出的異常沒有被 catch 塊捕獲,例如,將catch(int e),改為catch(char e),當(dāng)輸入的 n 為 0 時(shí),拋出的整型異常就沒有 catch 塊能捕獲,這個(gè)異常也就得不到處理,那么程序就會(huì)立即中止,try...catch 后面的內(nèi)容都不會(huì)被執(zhí)行。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享c++異常如何處理內(nèi)容對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司,關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司,詳細(xì)的解決方法等著你來學(xué)習(xí)!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、網(wǎng)站設(shè)計(jì)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

新聞標(biāo)題:c++異常如何處理-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://muchs.cn/article0/djjsoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)站排名網(wǎng)頁設(shè)計(jì)公司、微信公眾號(hào)用戶體驗(yàn)、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)