C 的異常處理

2021-05-22 22:46:05 字數 1337 閱讀 1065

c++的異常處理用到:try{}catch(){}

try塊是乙個普通的程式塊,就一般運**況而言跟沒有tryd的情況是一樣的,但在異常出現時,往往把可能出現異常的一些語句,包括函式的呼叫,比如在資料庫程式設計程式設計中,一些管理資訊系統在連線資料庫的時候(特別是ado方式),往往會把資料庫的連線與表的開啟語句放在裡面,若連線失敗或開啟失敗,則丟擲乙個異常,異常在緊隨的catch語句中**獲,然後執行catch對應的語句,詳細的下面再說。

異常的丟擲機制

異常是什麼意思?這個我覺得用我們一般的思維去想就可以了,英語裡可以通俗地說是:something bad。

異常丟擲往往是用關鍵字throw,一般是「throw 物件;」注意的是,throw丟擲的是物件的乙個拷貝,處理的手段跟函式的return有相似之處,但是兩者又有不同,return的型別是必須跟函式原先說明的返回值是一樣的;而throw則不用理會呼叫它的函式的返回型別是什麼。

try塊

由於所有程式必須要做的工作都放在try塊中,而如何處理錯誤是集中在catch塊中,因此,**會具有更高的可讀性,也方便編寫,因為我們不必在編寫必要的工作時,時時刻刻都想著如何去處理出現的錯誤,對於閱讀者來說,對於有多少可能出現的異常和相應的處理方式,更是一目了然。

異常的匹配機制

catch括號內會有對應的引數型別,當throw出乙個物件,就會在後面的乙個或幾個catch中查詢出與物件類相關的第乙個語句,並執行這個catch後中括號內的子句,而且後面的catch語句都不再作匹配判斷了,直接跳過。

在這裡,再深一層去想,你會發現在基類與派生類的異常匹配你會出現疑問,幸好早就有大師為我們回答了這個問題,bruce eckel的c++程式設計思想裡面有這樣的兩個方面:

ⅰ、乙個物件或者是指向派生類的引用都與基類處理器匹配,這就是異常匹配的不完全相關性,也就是我上面說相關而不是說相同的原因。 

也由於這個原因,一般首先捕獲派生類的異常,再捕捉基類異常。

ⅱ、如果異常處理器(也就是catch)是針對物件而不是引用,那麼異常物件將會被「切割」,變為基類物件,其他派生的資訊都會丟失,因此通常在catch中使用引用而不是值引數,以防異常物件所包含資訊被切割掉(這個做法還可以避免匹配時對異常物件的拷貝)。

捕獲所有異常

顧名思義,就是乙個異常處理器能捕捉到所有的異常,通常這是放在異常處理器列表的最後,以免把其他的異常處理器給遮蔽掉。

其實現方法就是:

catch(...){}

(通常這是用於清理資源)

喜歡記錄的人還是很多的哈哈,貼乙個  http://softbbs.pconline.com.cn/7251662.html

的異常處理 C 異常處理總結

做開發不僅僅要考慮到業務邏輯更要在寫 時將各種可能考慮周全,但是這又是很難的事情,畢竟開發就是個人的事,而使用者可能上萬甚至百萬級別。這時,程式的穩定性就極為重要,我們不能讓程式因為某一處執行出問題而就直接導致程式或者產生其他更嚴重的後果,比如 做除法時當除數為零時,陣列訪問越界時,容器capaci...

異常處理(二 C語言的異常處理)

1 異常終止 標準c庫提供了abort 和exit 兩個函式,它們可以強行終止程式的執行,其宣告處於 標頭檔案中。這兩個函式本身不能檢測異常,但在c程式發生異常後經常使用這兩個函式進行程式終止。下面的這個例子描述了exit 的行為 code include include int main void...

C 的異常處理

程式中常見的錯誤有兩種 語法錯誤和執行時錯誤 語法錯誤一般在編譯的時候會給出提示,但是執行時錯誤則不是那麼容易發現的。有的甚至能正常執行,但是不能給出正確的結果,或者程式非正常終止,或者導致宕機。因此,所有導致出現這些非正常情況的都屬於異常。在程式中我們要自己給出相應的異常處理機制,來避免出現自己未...