Catch 區塊的評估 (C++) 的方式

C + + 可讓您擲回例外狀況的任何型別,雖然也建議在一般情況下擲回從 std::exception 衍生的型別。C + + 例外狀況可以捕捉到由攔截指定相同的型別為擲回的例外狀況,或可以呼叫任何類型的例外狀況處理常式的處理常式。

如果擲回例外狀況型別是類別,也有基底類別 (類別),可以捕捉到由接受例外狀況的型別,以及例外狀況之型別的基底參考的基底類別的處理常式。請注意當參考時,會攔截到例外狀況,它都會繫結到實際擲回的例外狀況的物件; 否則,它是複本 (很像函式的引數)。

擲回例外狀況時,它可能會抓到下列型別攔截處理常式:

  • 可以接受任何型別 (使用省略符號語法) 的處理常式。

  • 處理常式可接受相同的型別做為例外狀況物件。 因為它是複本, const 和volatile修飾詞會被忽略。

  • 接受相同的型別例外狀況物件的參考處理常式。

  • 接受的參考處理常式 const 或volatile形式的例外狀況物件相同的型別。

  • 可接受的例外狀況的物件 ; 相同型別的基底類別處理常式 因為它是複本, const 和volatile修飾詞會被忽略。攔截 基底類別處理常式不應優先於 攔截衍生的類別處理常式。

  • 接受的例外狀況物件相同型別的基底類別的參考處理常式。

  • 接受的參考處理常式 const 或volatile形式的例外狀況物件相同型別的基底類別。

  • 接受的指標,可透過標準的指標轉換規則轉換成擲回的指標物件處理常式。

順序攔截 處理常式會顯示為有意義的因為處理常式指定 區塊會檢查其出現的順序。比方說,它是放置在衍生類別處理常式之前的基底類別處理常式錯誤。在相對應的攔截找不到處理常式,後續的處理常式不會檢查。因此,一個省略符號攔截 處理常式必須是最後的處理常式,如其 區塊。例如:

// ...
try
{
    // ...
}
catch( ... )
{
    // Handle exception here.
}
// Error: the next two handlers are never examined.
catch( const char * str )
{
    cout << "Caught exception: " << str << endl;
}
catch( CExcptClass E )
{
    // Handle CExcptClass exception here.
}

在這個範例中,省略號攔截的處理常式就只會檢查的處理常式。

請參閱

參考

C + + 例外處理