Wyjątki są przydatne w różnych okolicznościach.
Po pierwsze, istnieją pewne funkcje, w przypadku których koszt obliczenia warunku wstępnego jest tak wysoki, że lepiej jest po prostu wykonać obliczenia i przerwać z wyjątkiem, jeśli okaże się, że warunek wstępny nie jest spełniony. Na przykład nie można odwrócić macierzy osobliwej, jednak aby obliczyć, czy jest ona pojedyncza, należy obliczyć wyznacznik, który jest bardzo drogi: może i tak trzeba będzie to zrobić wewnątrz funkcji, więc po prostu „spróbuj” odwrócić macierz i podać raport błąd, jeśli nie możesz, zgłaszając wyjątek. Jest to w zasadzie wyjątek jako negatywne użycie warunku wstępnego .
Są też inne przypadki, w których kod jest już złożony i przekazywanie informacji o błędach w górę łańcucha wywołań jest trudne. Dzieje się tak częściowo dlatego, że C i C ++ mają zepsute modele struktury danych: są inne, lepsze sposoby, ale C ++ ich nie obsługuje (na przykład używanie monad w Haskell). To użycie jest w zasadzie nie przeszkadzało mi to zrobić dobrze, więc rzucę wyjątek : to nie jest właściwy sposób, ale jest praktyczny.
Następnie istnieje główne zastosowanie wyjątków: do zgłaszania, gdy zewnętrzne warunki wstępne lub niezmienniki, takie jak wystarczające zasoby, takie jak pamięć lub miejsce na dysku, nie są dostępne. W takim przypadku zazwyczaj kończysz program lub jego główną podsekcję, a wyjątkiem jest dobry sposób przekazywania informacji o problemie. Wyjątki C ++ zostały zaprojektowane do zgłaszania błędów, które uniemożliwiają kontynuowanie programu .
Model wyjątek obsługi używane w większości współczesnych języków, w tym C ++ jest znany być złamane. Jest o wiele za potężny. Teoretycy opracowali teraz lepsze modele niż całkowicie otwarty model „rzuć czymkolwiek” i „może, a może nie złap tego”. Ponadto używanie informacji o typie do klasyfikowania wyjątków nie było dobrym pomysłem.
Więc najlepszą rzeczą, jaką możesz zrobić, jest oszczędne rzucanie wyjątków, gdy występuje rzeczywisty błąd i nie ma innego sposobu, aby sobie z nim poradzić i wychwycić wyjątki jak najbliżej punktu rzutu .