try語句塊和異常處理


在C++中,異常處理包括:

· throw表達式(throw expression) 異常檢測部分使用throw表達式來表示它遇到了無法處理的問題。throw表達式拋出一個異常並把控制權轉移到能處理該異常的最近的catch子句。

· try語句塊(try block) 異常處理部分使用try語句塊處理異常。try關鍵字后跟着一個塊和多個catch子句。如果try語句塊的代碼throw了異常並且其中一個catch子句匹配該異常類型,則異常被該catch子句處理,否則,異常將由外圍try(try語句塊可以調用包含另一個try語句塊的函數)  處理,或者調用標准庫的terminate函數終止當前程序。

· 一套異常類(exception class) 用於在throw表達式和相關的catch子句之間傳遞異常的具體信息。

if(a != b)
    throw runtime_error("Data must refer to same value");

上面的代碼就是如果a和b不相等時,就拋出一個異常,該異常是類型runtime_error的對象。拋出異常將終止當前的函數,並把控制權轉移給能處理該異常的代碼。

int a, b;
while(cin >> a >> b){
    try{
        if(a != b)
            throw runtime_error("Data must refer to same value");
    }catch(runtime_error err){
        cout << err.what() << "\nTry Again? Enter y or n" << endl;
        char c;
        cin >> c;
        if(!cin || c == 'n') break;
    }
}

上面的代碼中,try語句塊中如果判斷a與b不相等,就拋出一個runtime_error類型的異常,try語句塊后有一個與之相對應的catch語句,那么就會執行該catch語句來處理異常。

what函數返回值是一個指向C風格字符串的const char*。what函數返回的C風格字符串的內容與異常對象的類型有關。如果異常類型有一個字符串初始值,則what返回該字符串。對於其他吳初始值的異常類型來說,what返回的內容由編譯器決定。

 

關於標准異常

C++標准庫定義了一組類,用於報告標准庫函數遇到的問題。這些異常類也可以在用戶編寫的程序中使用,它們分別定義在4個頭文件中:

· exception頭文件定義了最通用的異常類exception。它只報告異常的發生,不提供任何額外信息。

· stdexcept頭文件定義了幾種常用的異常類。

· new頭文件定義了bad_alloc異常類型。

· type_info頭文件定義了bad_cast異常類型。

 

 

 

以上圖片摘自qingdujun的博客:https://blog.csdn.net/qingdujun/article/details/75195061

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM