23 C 丟擲異常型別

2021-09-16 22:20:00 字數 1570 閱讀 4904

1.什麼是錯誤?

在設計、編碼甚至測試階段無法呈現,但是在使用者的使用過程中卻可能出現的錯誤。

2.如何處理錯誤?

1)通過函式的返回值表示成功失敗,以及具體的失敗原因

優點:區域性物件都能得到正確的析構

缺點:層層判斷返回值,**冗餘,流程複雜

2)通過遠端跳轉處理錯誤 (可以參考我的一篇文章)

優點:一步到位,**精煉,流程簡單

缺點:右花括號被跳過,區域性物件的析構函式不執行,記憶體洩漏

3)通過異常處理錯誤(c++支援)

異常可能 丟擲基本型別,類型別,指標型別;本節針對類型別指標進行說明

1.1、丟擲b* 指標,捕獲b*指標

#include 

using namespace std;

class

aint m_a;};

class

bint m_b;};

classc:

publica,

publicb;

void

fool

(void

)int main

(void

)catch(b

* that)

return0;

}

1.2、丟擲子類,捕獲基類(相容)

會發現丟擲c* 指標,使用捕獲到b* 指標後,b* 相比c* 偏移4個位元組

#include 

using namespace std;

class

aint m_a;};

class

bint m_b;};

classc:

publica,

publicb;

void

fool

(void

)void

bar(

void

)int main

(void

)catch(b

* that)

return0;

}

1.3 既然捕獲基類同時可以捕獲子類,那麼捕獲異常的順序最好先子類再使用基類捕獲

示例,將捕獲c* 異常

#include 

using namespace std;

class

aint m_a;};

class

bint m_b;};

classc:

publica,

publicb;

void

fool

(void

)void

bar(

void

)int main

(void

)catch(c

* that)

catch(b

* that)

return0;

}

catch (...)

catch (...)

丟擲類型別的異常

異常丟擲後,被選中的處理 是呼叫鏈中與該物件型別匹配且離丟擲異常位置最近的那個。如果丟擲的異常物件是乙個陣列,將轉換為指向陣列首元素的指標 如果丟擲的是乙個函式,則轉換為指向該函式的指標。丟擲throw之後,跟在throw後面的語句不會繼續執行。控制將從throw轉移到匹配的catch。該catch...

C 異常丟擲機制

乙個程序中可以同時包含多個執行緒。我們通常認為執行緒是作業系統 可識別的最小併發執行和排程單位 不要跟俺說還有 green thread 或者 fiber,os kernel 不認識也不參與這些物件的排程 同一程序中的多個執行緒共享 段 和常量 資料 段 靜態和全域性變數 和擴充套件段 堆儲存 但是...

c 丟擲標準異常

可以在自己的程式中丟擲某些標準異常。丟擲標準異常時,只需生成乙個描述該異常的字串,交給異常物件,它將成為what 返回的描述字串。std strings throw std out of range s throw std out of range out of range somewhere,so...