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
Altre risorse
Procedura: Le eccezioni nei costruttori della classe base (C++)