請試著、 攔截,並擲回的陳述式 (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
}

請參閱

參考

C + + 例外處理

C + + 關鍵字

未處理的 C++ 例外狀況

__uncaught_exception

其他資源

How to: 處理例外狀況的基底類別建構函式 (C++)