2015-06-02 11 views
5

Dołączam plik nagłówkowy innej firmy. Posiada funkcje, które mogą/nie mogą powodować wyjątki. W moim kodzie źródłowym, w jaki sposób określić, które wyjątki mogą być wyrzucane z tego pliku? To było pytanie do wywiadu. Moją odpowiedzią były deklaracje funkcji i szukanie specyfikacji wyjątku. To może dać nam jakąś wskazówkę. Czy istnieje inny sposób przewidywania wyjątków, które można rzucać?Jak mogę odgadnąć wszystkie możliwe wyjątki, które mogą być zgłaszane w C++?

+0

Nie ma innego sposobu. Jeśli twój kod naprawdę nie pozwala na wyjątki (np. Jest to granica modułów), użyj klauzuli catch-all. – StoryTeller

+0

Czy istnieje narzędzie, które można uruchomić, aby to zrozumieć? –

+0

Jedyny ** sposób na poznanie polega na sprawdzeniu kodu źródłowego biblioteki. – QuestionC

Odpowiedz

3

ten ma kilka aspektów:

  • Jeśli wyjątki są zgłaszane do funkcji, tylko te (i Klasy pochodne, oczywiście), ewentualnie mogą być rzucane, wszyscy inni spowoduje zakończenie programu.
  • Nawet jeśli wyjątki są zadeklarowane dla funkcji, nie każdy kompilator faktycznie wymusza tę regułę.
  • Jeśli żadne wyjątki (nie pusty zestaw wyjątków!) Są zadeklarowane dla funkcji, wszystko może zostać rzucone.
  • Rozsądny kod nigdy nie wyrzuci niczego, co nie pochodzi od std::exception, więc założenie, że lub wyprowadzony typ jest rzucany jest dobrym podejściem.
  • Dobry kod będzie dokumentował obsługę błędów, chociaż należy domyślnie spodziewać się, że std::bad_alloc pochodzi z dowolnej funkcji alokującej pamięć.
+0

Niestety istnieje wiele nierozsądnych kodów tam. W związku z tym dlaczego catch-all może być przydatny, nawet jeśli jest to również zazwyczaj znak facepalm również jest konieczne. –

Powiązane problemy