請試著、 攔截,並擲回的陳述式 (C++)
C + + 例外狀況使用 try 攔截和擲回的關鍵字。
擲回運算式表示錯誤或例外狀況。您可以使用任何型別的物件,擲回運算式的運算元。此物件最常用來傳達錯誤的相關資訊。通常,您應該使用 std::exception 類別或衍生類別中的標準程式庫所定義的其中一項,或如果那些沒有適當的然後會自己的例外狀況類別衍生自 std::exception。
Try try 區塊括住的一或多個可能會擲回例外狀況的陳述式。
一或多個 catch 區塊必須立即接在 try 區塊。每一個 catch 區塊指定它可以處理的例外狀況的類型。
以下的語法顯示範例try區塊以及它的處理常式。假設GetNetworkResource()取得資料透過網路連接,和兩個例外狀況型別是使用者定義的類別衍生自 std::exception 請注意,例外狀況會傳遞的 catch 陳述式中的參照:
MyData md;
try {
// code that could throw an exception
md = GetNetworkResource();
}
catch (networkIOException& e) {
// code that executes when an exception of type
// networkIOException is thrown in the try block
//…
// Log error message in the exception object.
cerr << e.what();
}
catch (myDataFormatException& e) {
// code that handles another exception type
//…
cerr << e.what();
}
// The following syntax shows a throw expression:
MyData GetNetworkResource()
{
//...
if(IOSuccess == false)
throw networkIOException("Unable to connect");
//...
if(readError)
throw myDataFormatException("Format error");
// ...
}
備註
後面的程式碼try子句是保護程式碼區段。擲回運算式 (引發) 就會擲回例外狀況。之後的程式碼區塊catch子句是例外狀況處理常式中,並攔截 (handle) 如果擲回和攔截運算式中的型別相容,所擲回運算式擲回例外狀況。如需管理 catch 區塊中的型別符合規則的清單,請參閱 _____。如果 catch 陳述式會指定一個省略符號 (...) 為型別,而不是catch區塊處理例外狀況,包括 c 的例外狀況,例如記憶體保護系統或應用程式產生的例外任何的狀況型別、 除以零和浮點數的違規。Catch 區塊會嘗試以程式的順序,這種處理常式必須是最後一個處理常式,因為其try區塊。使用 catch (…) 時應特別小心。 通常這類的 catch 區塊用來記錄錯誤,並執行任何特殊的清理,才能停止執行程式。不允許程式繼續除非 catch 區塊懂得如何處理會攔截特定例外狀況。
A 擲回運算式 re-throws 沒有運算元的 [目前處理的例外狀況。這類運算式應只在catch處理常式或函式中呼叫catch處理常式。重新擲回的例外狀況物件是原始的例外狀況物件 (不是複本)。例如:
try {
throw CSomeOtherException();
}
catch(...) { // Catch all exceptions – dangerous!!!
// Respond (perhaps only partially) to exception
throw; // Pass exception to some other handler
}