丟擲類型別的異常

2021-09-06 07:27:33 字數 814 閱讀 5387

異常丟擲後,被選中的處理**是呼叫鏈中與該物件型別匹配且離丟擲異常位置最近的那個。

如果丟擲的異常物件是乙個陣列,將轉換為指向陣列首元素的指標;如果丟擲的是乙個函式,則轉換為指向該函式的指標。

丟擲throw之後,跟在throw後面的語句不會繼續執行。控制將從throw轉移到匹配的catch。該catch可以是同一函式中區域性的catch,也可以在直接或間接呼叫發生異常的函式的另乙個函式中。

因為在處理異常的時候會釋放區域性儲存,所以被丟擲的物件就不能再區域性儲存,而是用throw表示式初始化乙個稱為異常物件(exception object)的特殊物件。異常物件由編譯器管理,而且保證駐留在可能被啟用的任意catch都可以訪問的空間。這個物件由throw建立,並被初始化為被丟擲的表示式的副本。異常物件將傳給對應的catch,並且在完全處理了異常之後撤銷。

異常物件通過複製被丟擲表示式的結果建立,所以該表示式結果必須是可以複製的型別。

1. 異常物件與繼承

在實踐中,許多應用程式丟擲的表示式,其型別來自某個繼承層次。當丟擲乙個表示式時,被丟擲物件的靜態編譯型別將決定異常物件的型別。

2. 異常與指標

如果在丟擲的表示式中,對指標解引用,其型別與指標的型別匹配。如果該指標是乙個指向派生類物件的基類型別指標,則那個物件將被分割,只丟擲基類部分。也就是說,無論物件的實際型別是什麼,異常物件的型別都與指標的靜態型別相匹配。

如果丟擲的是指標本身,問題可能更嚴重。如果丟擲指向區域性物件的指標,而處理**在另一函式中,則執行處理**時指標所指向的物件將不再存在。即使處理**在同一函式中,也必須保證指標所指向的物件在catch處存在。

【學習資料】 《c++ primer》

23 C 丟擲異常型別

1.什麼是錯誤?在設計 編碼甚至測試階段無法呈現,但是在使用者的使用過程中卻可能出現的錯誤。2.如何處理錯誤?1 通過函式的返回值表示成功失敗,以及具體的失敗原因 優點 區域性物件都能得到正確的析構 缺點 層層判斷返回值,冗餘,流程複雜 2 通過遠端跳轉處理錯誤 可以參考我的一篇文章 優點 一步到位...

Java 丟擲異常 自定義異常類

常用的異常處理方法有 一 try catch 語句 二 throw throws 語句 三 自定義異常類 眾所周知,當程式執行過程中,如果遇到了錯誤 比如陣列下標越界,空指標等 程式就會自動終止,但這種錯誤一般是偶然的,可能是使用者輸入不呵呵程式編寫者的意圖導致,而不是程式本身問題,這是我們要做的,...

關於返回可選型別的異常丟擲函式

大家知道,在可選鏈 optional chain 裡,返回可選型別的可選鏈返回的仍是可選型別。但是要注意的是,在異常處理裡,對於返回型別是可選型別 optional 的異常丟擲函式,其返回型別是可選的可選型別。非常繞口是不是,對啦 就是這樣 2333333333。簡單來說,對於下面這個異常丟擲函式 ...