C 異常捕獲及處理

2021-10-04 20:48:25 字數 1326 閱讀 2448

之前在刷 leetcode 時用到了異常處理,記錄一下。

一般來說 c++ 的庫函式呼叫時,如果發生引數使用不當,或引數超限等,程式會直接丟擲異常而終止執行,但這並不是我們想要的結果,我們往往希望當出現異常時,再對異常進行特殊處理進而完善程式,使程式繼續執行。

在 leetcode myatoi() 一題中,要求實現字串轉數字,但是這裡的字串轉數字要比 標準庫中的std::stoi()函式考慮的情況更多!所以直接省懶勁,能用stoi()轉換的直接轉換,對於stoi()不能處理的字串再進行特殊處理。

源**片段:

else

res =

stoi

(str)

;

這樣寫的話,顯然如果stoi()無法轉換則程式會直接丟擲異常,stoi()丟擲的異常有兩種(參見官方文件):

else

catch

(const std::exception& e)

// 捕獲異常,這裡用的是 std::exception,即未指明具體異常型別,適用於只想捕獲異常,而不做相應處理的情況

上面提到stoi()會丟擲兩種異常,我們可以根據這兩種異常做相應處理:

else

catch

(const std::invalid_argument& e)

// 捕獲 std::invalid_argument 異常

catch

(const std::out_of_range& e)

// 捕獲 std::out_of_range 異常

try 往往和 catch 搭配使用,catch 可以有多個,但至少要有乙個。需要注意的是 try 語句塊內宣告的變數在塊外部無法訪問(即使是在 catch 子句內也不行)!

以除法除以零為例:你可以丟擲 c++ 中的標準異常型別(runtime_error 為例)

#include

using

namespace std;

intmain()

catch

(const runtime_error &e)

return0;

}

也可以自定義異常型別:

try

catch

(int e)

// 這裡用 e 來接收 a 的值

C 異常丟擲與捕獲及處理

c 異常丟擲與捕獲及處理 一 異常 迄今為止,我們處理程式中的錯誤一般都是用if語句測試某個表示式,然後處理錯誤的特定義 c 異常機制 使用了三個新的關鍵字 seh 結構化 異常處理 try 標識可能出現的異常 段 throw 丟擲乙個異常 catch 標識處理異常的 段 使用異常處理將帶來更多的系...

c 異常處理,異常宣告,捕獲異常

c 捕獲異常的一些規則 1 非mfc 的c 異常應該用過引用來捕獲。使用引用來捕獲異常不需要刪除c 異常物件。因為使用引用捕獲的異常物件會在棧中傳遞。而且保持了多型性,使得你捕獲的異常正是你丟擲的異常物件。使用指標捕獲異常的話,需要你刪除異常物件。使用值捕獲的話,會導致物件的slicing 問題。更...

iOS常用捕獲異常及處理方法

使用 try catch捕獲異常 try catch n ception exception finally 有時候崩潰我們是無法避免的,因此我們可以在程式崩潰之前做一些 動作 收集錯誤資訊 下面的例子是把捕獲到的異常傳送至開發者的郵箱。來自garveycalvin的部落格 nssetuncaugh...