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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ Primer 5th笔记(chap 18 大型程序工具)捕获异常

發(fā)布時間:2025/3/21 c/c++ 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ Primer 5th笔记(chap 18 大型程序工具)捕获异常 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. catch 子句 (catch clause) 中的異常聲明(exception declaration)

聲明的類型決定了處理代碼所能捕獲的異常類型。

這個類型必須是完全類型, 它可以是左值引用, 但不能是右值引用

1.1 catch 的參數(shù)類型可以是引用類型或非引用類型

如果 catch 的參數(shù)是基類類型, 則我們可以使用其派生類類型的異常對象對其進行初始化。 此時, 如果 catch 的參數(shù)是非引用類型, 則異常對象將被切掉一部分

異常聲明的靜態(tài)類型將決定 catch 語句所能執(zhí)行的操作。如果 catch 的參數(shù)是基類類型, 則 catch 無法使用派生類特有的任何成員。

1.2 查找匹配的處理代碼

在搜尋 catch 語句的過程中, 我們最終找到的 catch 未必是異常的最佳匹配。 相反,挑選出來的應該是第一個與異常匹配的 catch 語句。 因此, 越是專門的 catch 越應該置于整個 catch 列表的前端

絕大多數(shù)類型轉換都不被允許, 除了一些極細小的差別之外:

  • 允許從非常量向常量的類型轉換, 也就是說, 一條非常量對象的 throw 語句可以匹配一個接受常量引用的 catch 語句。
  • 允許從派生類向基類的類型轉換。
  • 數(shù)組被轉換成指向數(shù)組( 元素) 類型的指針, 函數(shù)被轉換成指向該函數(shù)類型的指針

1.3 重新拋出

一條 catch 語句通過重新拋出 (rethrowing) 的操作將異常傳遞給另外一個 catch 語句。 這里的重新拋出
仍然是一條 throw 語句, 只不過不包含任何表達式:
throw;

{// 使用引用類型的異常聲明catch (my_error &eObj) {eObj.status = errCodes::severeErr; //修改異常對象throw;//重新拋出} catch (other_error_eObj) {// 非引用類型eObj.status = errCodes::badErr;//只是修改了對象的局部副本throw;//異常對象的status沒有修改} }

1.4 .捕獲所有異常 (catch-all)

使用省略號作為異常聲明,如 catch (… )

catch(…);一條語句可以和任意類型的異常對象匹配。

它經(jīng)常和重新拋出語句一起使用,其中catch執(zhí)行完當前局部能夠完成的工作之后,重新拋出異常。

{void manip () {try {// 這里的操作將引發(fā)并拋出一個異常} catch (...) {// 處理異常的某一些操作throw;}}// catch(...)既可以單獨出現(xiàn)// 也可以和其他的catch一起出現(xiàn)// 如果和其他的catch一起出現(xiàn)// 則它必須放在最后的位置// 否則放在捕獲所有異常的catch語句之后的catch語句永遠不會被執(zhí)行 }

總結

以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 18 大型程序工具)捕获异常的全部內容,希望文章能夠幫你解決所遇到的問題。

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