c 入門學習 異常

2021-03-31 15:15:53 字數 1395 閱讀 5031

1. 異常

1.1 異常的丟擲

異常丟擲使用throw關鍵字,使用語法為:

throw 異常

異常是個物件,如int i =1; throw i等。也可以自定義乙個異常類,在必要的時候丟擲該異常類的例項:

class myexception{};

throw myexception();//這裡不能使用throw myexception;

也可以使用throw new myexception(),這裡返回的是乙個指標,catch時引數就不一樣了。

1.2 try塊

try塊用於捕獲異常,所以它必須包圍能丟擲的異常語句。try後是一組處理**,稱之為catch子句,如:

trycatch( string exceptionmsg)

catch(const stat***ception &stat***cep)

catch(…)

如果丟擲的是乙個指標,如:

throw new string(「hello」);

那麼catch的引數應為:

catch(string *msg)

如果在乙個捕獲語句中

1.3 異常物件

catch子句的異常宣告可以是乙個型別宣告或者物件宣告,在丟擲異常時最好把出錯資訊或者一些環境資訊儲存在異常物件中返回,如果僅是按值傳遞的異常物件的返回可能要經過二次物件的拷貝,一次是將異常丟擲try塊時,另一處是進入catch語句時,因此它會消耗很多資源。

如果採取以下結構的catch:

throw string(「hello」);

catch(string &msg)

只需拷貝一次,即異常丟擲時對異常物件進行了拷貝,進入catch子句後只是對該拷貝引用的訪問,而沒有再進行第二次拷貝。

如果採用以下結構的catch,那麼一次拷貝都不需要了:

throw new string(「hello」);

catch(string *msg)

在丟擲異常時,異常物件是在堆中建立的,丟擲的是該物件的指標的拷貝,進入catch後又對該指標進行了拷貝,即對異常物件的指標進行了兩次拷貝,但對異常物件本身沒有進行拷貝。

如果使用以下結構,僅對異常物件的指標進行了一次拷貝,對異常物件不拷貝:

throw new string(「hello」);

catch(string* &msg)

以上**省略了try塊。

如果在乙個catch中不能完全處理指定的異常,應將它重新丟擲,重新丟擲的語句為:

throw; //不需要在throw中加上異常物件,它會丟擲原來的那個異常物件;

如果想再catch中修改異常物件中的資訊,在catch中的引數應是引用型別,這和一般函式引數傳遞一樣的道理。

還有乙個特殊的catch,就是catch(…),這種catch會捕獲所有型別的異常。

C 學習入門(四) 異常和異常的處理

2.異常處理 3.總結 在程式設計和執行中,不可避免的會出現各種各樣的錯誤,為了減少設計程式中的錯誤,一般採用兩種解決方案 1 在程式設計階段,使用除錯程式找出程式中的錯誤並改正。2 在程式中加入異常處理的語句,從而使得程式具有容錯功能。程式的錯誤分為以下3種 1 語法錯誤。如果使用了錯誤的語法 函...

python入門學習5 異常

當程式檔案中有錯誤是,直譯器就不能繼續執行 會給出錯誤提示 1.1 異常的語法 try 可能發生錯誤的 塊 except 異常型別 出現異常執行的 2.1 異常的體驗 try name file open aa.txt w name file.close except print 這裡有問題,程式執...

C 學習 C 異常

異常處理就是處理程式中的錯誤。所謂錯誤是指在程式執行的過程中發生一些異常事件 如 除0溢位,陣列下標越界,所要讀取的檔案不存在,空指標,記憶體不足等等 try 試圖執行 中的內容,在可能出現異常的地方,丟擲異常throw,try下面catch捕獲異常。如果不想處理異常,繼續向上丟擲 throw,如果...