Condividi tramite


Come blocchi catch vengono esaminati (C++)

C++ consente di generare eccezioni di qualsiasi tipo, sebbene in genere sia consigliabile utilizzare per generare i tipi derivati da deviazione standard:: eccezione.Eccezione C++ può essere intercettata da un oggetto catch gestore che specifica lo stesso tipo dell'eccezione generata, o da un gestore che può intercettare qualsiasi tipo di eccezione.

Se il tipo di eccezione generata un'eccezione è una classe, che dispone inoltre di una classe di base (o classi), è possibile intercettare i gestori che accettano le classi base del tipo di eccezioni oppure dai riferimenti alle basi del tipo di eccezioni.Si noti che quando viene rilevata da un riferimento, viene associato aoggetto eccezione generato, in caso contrario, è una copia (molto simile a come argomento di una funzione.

Quando viene generata un'eccezione, può essere intercettata dai seguenti tipi di catch gestori:

  • Un gestore che accetta qualsiasi tipo (mediante la sintassi dei puntini di sospensione).

  • Un gestore che accetta lo stesso tipo di eccezione; poiché è una copia, const e volatile i modificatori vengono ignorati.

  • Un gestore che accetta un riferimento allo stesso tipo di eccezione.

  • Un gestore che accetta un riferimento a un oggetto const o volatile il form dello stesso tipo come oggetto eccezione.

  • Un gestore che accetta una classe base per lo stesso tipo di eccezione; poiché è una copia, const e volatile i modificatori vengono ignorati.catch il gestore per una classe base non deve precedere catch gestore della classe derivata.

  • Un gestore che accetta un riferimento a una classe base per lo stesso tipo di eccezione.

  • Un gestore che accetta un riferimento a un oggetto const o volatile il form di una classe base dello stesso tipo come oggetto eccezione.

  • Un gestore che accetta un puntatore a un oggetto generato del puntatore può essere convertito tramite le regole di conversione standard del puntatore.

l'ordine in cui catch i gestori vengono visualizzati sono significativi, perché gestori per un oggetto specificato prova il blocco viene cercato il relativo aspetto.Ad esempio, è un errore per posizionare il gestore per una classe base prima del gestore per una classe derivata.dopo una corrispondenza catch il gestore viene trovato, gestori successivi non viene esaminato.Di conseguenza, ellissi catch il gestore deve essere l'ultimo gestore per il relativo prova blocco.Di seguito è riportato un esempio:

// ...
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.
}

In questo esempio, ellissi catch il gestore è l'unico gestore che viene esaminato.

Vedere anche

Riferimenti

Gestione delle eccezioni C++