Является ли стандартной практикой использование стандартных подклассов std :: exception для ваших собственных целей? - PullRequest
0 голосов
/ 16 марта 2020

Если у меня есть такой код:

std::vector<foo> bar;
...fill up bar...
if (bar.size() < 5)
{
    throw std::out_of_range("Not enough foos in the bar");
}

Допускает ли стандарт и ожидает ли такое повторное использование, или это осуждается?

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Короткий ответ: Да.

Более длинный ответ: Вы можете бросить что-то, не производное от std::exception, но это затрудняет для людей написание общих c catch предложений (кроме catch(...)) и распечатать любую значимую информацию об исключении (часть .what()).

Найдите стандартное исключение, наилучшим образом описывающее, что вы собираетесь бросить, и используйте его. Вы также можете унаследовать его, чтобы сделать собственное исключение.

1 голос
/ 16 марта 2020

Не для их собственных целей, но если вы хотите использовать их так, как они изначально предназначались, то это нормально.

Ваш пример, возможно, разумное использование std::out_of_range, но, к примеру, выдает std::bad_weak_ptr не будет уместным. Ссылка для `std :: out_of_range гласит:

сообщает об ошибках, которые являются следствием попытки доступа к элементам вне определенного диапазона.

Так что, если вы собираетесь получить доступ к bar[5], тогда исключение уместно.

В конечном итоге, если вы создаете библиотеку, вам важно задокументировать, какие исключения вы выбрасываете и почему .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...