日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

try语句块和异常处理(throw)

發布時間:2023/12/13 综合教程 42 生活家
生活随笔 收集整理的這篇文章主要介紹了 try语句块和异常处理(throw) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

異常處理包括

throw表達式,異常檢測使用throw表達式來表示它遇到了無法處理的問題。我們說throw引發(raise)了異常。
try語句塊,異常處理部分使用了try語句塊處理異常。try語句塊以關鍵字try開始,并以一個或多個catch子語句結束。try語句塊中拋出的異常通常會被某個catch子語句處理。
一套異常類,以用在throw表達式和相關的catch子語句之間傳遞異常的處理信息。

throw表達式

程序的異常檢測使用部分使用throw表達式引發一個異常。throw表達式包含關鍵字throw和緊隨其后的一個表達式,其中表達式的類型就是拋出的異常類型。

舉個簡答的例子

Sales_item item1, item2;
cin >> item2 >> item2;
// 首先檢查item1和item2是否表示同一種書籍
if (item1.isbn() == item2.isbn()){
    cout << item1 + item2 << endl;
    return 0;
}
else{
    cerr << "Data must refer to same ISBN" << endl;
    return -1;
}

在真實的程序中應該把對象相加的代碼和用戶交互的代碼分離開來。

此例中,我們改寫程序使得檢查完成后不再直接輸出一條信息,而是拋出一個異常:

if (item1.isbn() != item2.isbn()){
    throw runtime_error("Data must refer to same ISBN");
}
// 如果程序執行到了這里,表示兩個ISBN是一樣的
cout << item1 + item2 << endl;

在這段代碼中,如果ISBN號不一樣就拋出一個異常,該異常的類型是runtime_error的對象。

拋出異常將終止當前的函數,并把控制權轉移給能處理該異常的代碼。

try語句塊

在前面的例子中,我們使用了一個throw表達式以避免把兩個代表不同書籍的Sales_item相加。

程序本來要執行的任務出現在try語句塊中,這是因為這段代碼可能會拋出一個runtime_error類型的異常。

while (cin >> item1 >> item2){
    try{
        // 執行添加兩個Sales_item對象的代碼
        // 如果添加失敗,代碼拋出一個runtime_error異常
    }catch (runtime_error err){
        // 提醒用戶兩個ISBN必須一致
        cout << err.what()
             << "
Try Again? Enter y or n" << endl;
        char c;
        cin >> c;
        if (!cin || c == 'n')
            break;
    }
}

try語句塊對應一個catch子語句,該子語句負責處理類型為runtime_error的異常。

如果try語句塊的代買拋出了runtime_error異常,接下來執行catch塊內的語句。

給用戶的提示信息中輸出了err.what()的返回值。what是runtime_error的一個成員函數。每個標準庫異常都定義了名為what的成員函數,這些函數沒有參數,返回值是C風格的字符串。

標準異常

總結

以上是生活随笔為你收集整理的try语句块和异常处理(throw)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。