Condividi tramite


provare, intercettare e generare istruzioni (C++)

Le eccezioni C++ utilizzano la valutazione, intercettano e generano le parole chiave.

Un'espressione throw segnala l'errore o la condizione insolita.È possibile utilizzare un oggetto di qualsiasi tipo come operando di un'espressione throw.Questo oggetto viene utilizzato in genere per trasferire le informazioni sull'errore.In genere, è consigliabile utilizzare lo deviazione standard:: la classe di eccezione o una delle classi derivate definite nella libreria standard, o se nessuno di questi sono appropriati, deriva quindi proprietario della classe di eccezione da deviazione standard:: eccezione.

Un blocco try racchiude uno o più istruzioni che potrebbero generare un'eccezione.

Uno o più blocchi catch seguono immediatamente un blocco try.ogni blocco catch specifica il tipo di eccezione che può gestire.

La sintassi seguente viene illustrato un esempio try blocco e i propri gestori.Si supponga che GetNetworkResource() acquisisce i dati tramite una rete si connettono e che i due tipi di eccezione è classi definite dall'utente che derivano da deviazione standard:: eccezione Si noti che le eccezioni vengono passate per riferimento nell'istruzione 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"); 
    // ...
}

Note

il codice dopo try la clausola rappresenta la sezione accessibile del codice.L'espressione throw genererà () genera un'eccezione.il blocco di codice dopo catch la clausola è il gestore eccezioni e intercetta (handle) l'eccezione generata dall'espressione throw se il tipo nelle espressioni di rilevamento e throw è compatibile.Per un elenco delle regole che controllano la tipo-corrispondenza in blocchi catch, vedere il ___.Se l'istruzione catch specifica i puntini di sospensione...piuttosto che un tipo, catch il blocco gestisce qualsiasi tipo di eccezione, incluse le eccezioni c# e il sistema o più eccezioni applicazione-generate come la protezione della memoria, esegue la divisione fra da zero e violazioni a virgola mobile.Poiché i blocchi catch vengano provati nell'ordine di programma, ad esempio un gestore deve essere l'ultimo gestore per il relativo try blocco.Rilevamento di utilizzo (…) con cautela; in genere tale blocco catch viene utilizzato per registrare errori ed eseguire le operazioni di pulitura speciale prima di interrompere l'esecuzione del programma.Non consentire a un programma di proseguire meno che il blocco catch grado di gestire l'eccezione specifica che viene intercettata.

In tiro-espressione senza i ri-tiri di operando l'eccezione attualmente che viene gestito.Tale espressione deve essere visualizzato solo nella catch gestore o in una funzione chiamata dall'interno di un oggetto catch gestore.L'oggetto di eccezione ri-generato dell'oggetto eccezione originale (non una copia).Di seguito è riportato un esempio:

try {
   throw CSomeOtherException();
}
catch(...) {  // Catch all exceptions – dangerous!!!
   // Respond (perhaps only partially) to exception
   throw;       // Pass exception to some other handler
}

Vedere anche

Riferimenti

Gestione delle eccezioni C++

Parole chiave C++

Eccezioni non gestite di C++

__uncaught_exception

Altre risorse

Procedura: Le eccezioni nei costruttori della classe base (C++)