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...