throw:拋,在出錯的地方丟擲異常資訊。
try:嘗試捕獲throw丟擲的異常資訊。
catch:有個引數用來接收捕獲的異常資訊(引數型別需和丟擲的錯誤資訊型別保持一致)
catch(…):捕獲所有異常資訊
#include
using
namespace
std;
int divide(int numone,int numtwo)
int main()
catch (char* e) //捕獲異常資訊(也為char*型)
system("pause");
return
0;}
執行結果:
異常資訊拋的方式
在函式一層層的呼叫之後會形成棧的結構,異常資訊會從丟擲它的地方一層層往上拋,每網上拋一層,前乙個拋它的函式所被分配的棧區就會被隨之**,直到被catch到,如果使用者沒有寫catch語句,這些異常資訊最終會被編譯器捕獲。
#include
using
namespace
std;
void foo3()
void foo2()
void foo1()
int main()
catch (char* e)
system("pause");
return
0;}
執行結果:
c++用於異常處理的類
exception :基類
runtime_error:執行時錯誤
overfloe_error:算術溢位錯誤
range_error:範圍出現錯誤
underflow_error:堆疊上溢
logic_error:邏輯錯誤,語法錯誤
invalid_argument :不存在的引數
length_error:要表示的字串的長度過過長, 超出所能表示的最大限制
out_of_range :超出範圍
bad_alloc:分配空間時出錯
bad_cast:型別轉換出錯時
不到萬不得已不要拋回指標,因為可能丟擲的指標指向的是棧區,而異常資訊的丟擲會隨之會**棧區,導致指標變為非法訪問。
一般定義自己的異常類會繼承類exception,在捕獲異常時也要記得把對自己異常類的捕獲寫在對系統預設異常類的捕獲前面,因為基類指標可以指向派生類物件,派生類指標不能指向基類物件,這樣可以優先獲取到自己定義的異常資訊
C 中異常機制
在程式執行時,可能會有一些隱藏的bug突然爆發,導致程式崩潰。遇到這樣的情況除錯起來難度較大,因此c 提供了一種異常不住丟擲機制,在不確定安全或者懷疑有重大隱患的 塊前面加上try關鍵字,後面使用catch關鍵字捕捉,如果捕捉到異常,可以在catch 塊中使用throw關鍵字丟擲異常。用法如下 tr...
C 異常 異常機制
c 異常是丟程式執行過程中發生的異常情況 例如被0除 的一種響應。異常提供了將控制權從程式的乙個部分傳遞到另一部分的途徑。對異常的處理有3個組成部分 引發異常 使用處理程式捕獲異常 使用try塊。程式在出現問題時將引發異常。throw語句實際上是跳轉,即命令程式跳到另一條語句。throw關鍵字表示引...
c 的異常機制
異常這玩意在函式呼叫層次深,模組多,出現異常立刻跳出,在最外層處理的情況下很好用。可以讓 變得更整潔。當throw出現時,程式會直接跳轉到catch處 一直向函式上層搜尋catch塊,如果沒有catch則直接崩潰 try catch 程式在執行時,可以理解為先呼叫throw函式,throw函式呼叫c...