Sdílet prostřednictvím


Zkuste, úlovku a vyvoláním prohlášení (C++)

Výjimky C++ použít pokuste, zachycení a vyvoláním klíčová slova.

Výraz throw signály chyba nebo výjimečných podmínek.Každý typ objektu můžete použít jako operand throw výraz.Tento objekt se obvykle používá k vyjádření informací o chybě.Obvykle by pomocí třídy std::exception nebo některé z odvozených tříd, které jsou definovány ve standardní knihovny nebo pokud žádný z těch, které jsou vhodné, odvodit pak vlastní třída výjimek z std::exception.

Blok try ohraničuje jednu nebo více příkazů, které mohou vyvolat výjimku.

Jeden nebo více bloky catch následovat bezprostředně po bloku try.Každý blok catch Určuje typ výjimky, které lze zpracovávat.

Následující syntaxe je uveden příklad try bloku a jeho obsluhy.Předpokládejme, že GetNetworkResource() získá připojení dat prostřednictvím sítě a typy dvě výjimky jsou uživatelem definované třídy, které pocházejí z std::exception poznámku, výjimky jsou předány podle odkazu v příkazu 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"); 
    // ...
}

Poznámky

Kód po try klauzule je chráněné části kódu.Výraz throw vyvolá (vznese) výjimku.Blok kódu po catch klauzule je popisovač výjimky a úlovky (úchyty) výjimku throw výraz vyvolána, pokud typ v throw a úlovku výrazů jsou kompatibilní.Seznam pravidel, která určují odpovídající v bloky catch naleznete v tématu _____.Pokud příkaz catch určuje tři tečky (...) místo typu, catch bloku zpracovává jakýkoli typ výjimky, včetně c výjimky a výjimky systému nebo aplikacemi jako ochrana paměti, dělení nulou a porušení s plovoucí desetinnou čárkou.Protože bloky jsou použity v pořadí program, takové zpracování úlovků musí být poslední popisovač pro jeho try bloku.Catch (…) používejte opatrně; Protokolovat chyby a provádět jakékoli zvláštní vyčištění před k zastavení provádění programu se obvykle používá takové blok catch.Nepovolit programu pokračovat, pokud ví, jak zpracovat určité výjimky zachycené blok catch.

A throw výraz s operand bez re-throws výjimka zpracována aktuálně.Takový výraz se zobrazí pouze v catch popisovač nebo funkce volána uvnitř catch popisovač.Re-thrown výjimka je původní objekt výjimky (není kopie).Příklad:

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

Viz také

Referenční dokumentace

Zpracování výjimek v C++

Klíčových slov jazyka C++

Neošetřené výjimky C++

__uncaught_exception

Další zdroje

Jak: zpracování výjimek v základní třídě konstruktory (C++)