Udostępnij za pośrednictwem


Spróbuj połowu i throw sprawozdań (C++)

Wyjątki C++, należy używać instrukcji try połowu i throw słów kluczowych.

Wyrażenie rzut sygnalizuje błąd lub wyjątkowych warunek.Jako argument Wyrażenie throw, można użyć obiektu dowolnego typu.Ten obiekt jest zazwyczaj używany do przekazywania informacji o błędzie.Zazwyczaj należy użyć klasy std::exception lub jednej z klas pochodnych, które są zdefiniowane w biblioteki standardowej, lub jeśli żaden z nich nie są odpowiednie, następnie pochodną klasy wyjątek std::exception.

Blok try obejmuje jeden lub więcej instrukcje, które może zgłosić wyjątek.

Jeden lub więcej bloki catch niezwłocznie przystępują do bloku try.Każdy blok catch określa typ wyjątku, który można ją obsługiwać.

Następującej składni przedstawiono przykładową try bloku i jego obsługi.Załóżmy, że GetNetworkResource() nabywa połączenie danych za pośrednictwem sieci i wyjątek dwa typy klas zdefiniowanych przez użytkownika, które wynikają z std::exception należy zauważyć, że wyjątki są przekazywane przez odwołanie w instrukcji 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"); 
    // ...
}

Uwagi

Kod po try klauzuli jest strzeżony sekcji kodu.Wyrażenie rzut wyrzuca (przebicia) wyjątek.Blok kodu po catch klauzuli jest obsługa wyjątków i połowy wyjątek wyrażeniem rzut Jeśli typ w wyrażeniach throw i połowu są zgodne (uchwytów).Lista reguł, które określają sposób typ dopasowania w bloki catch, zobacz _____.Jeśli instrukcja catch określa wielokropek (...) zamiast typu, catch bloku obsługuje dowolny typ wyjątku, w tym c wyjątków i wyjątki generowane przez system lub aplikacja, takich jak ochrona pamięci, dzielenie przez zero i zmiennoprzecinkowych naruszeń.Ponieważ bloki są sprawdzane w kolejności program, program obsługi catch musi być ostatnim obsługi jego try bloku.Połów (…) należy używać ostrożnie; Zazwyczaj blok catch jest używany do dziennika błędów i wykonywania wszelkich specjalnych czynności porządkowych przed zatrzymanie wykonywania programu.Nie zezwalaj na program kontynuować, chyba że blok catch wie, jak obsłużyć wyjątek szczególnych, który zostanie przechwycony.

A wyrażenie rzut z nie operandu re-throws wyjątek, aktualnie obsługiwane.Takie wyrażenie powinien pojawić się tylko w catch obsługi lub w funkcji wywołana z poziomu catch obsługi.Obiekt re-thrown wyjątku jest oryginalny obiekt wyjątku (nie Kopiuj).Na przykład:

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

Zobacz też

Informacje

Obsługa wyjątków C++

Słów kluczowych języka C++

Nieobsłużone wyjątki C++

__uncaught_exception

Inne zasoby

Jak: obsługi wyjątków w Konstruktory klasy bazowej (C++)