Возможный дубликат:
дизайн по контрактным испытаниям с помощью утверждения или исключения?
Есть ли правило для принятия решения об использовании исключений вместо утверждений (или наоборот). Сейчас я просто бросаю, если что-то, что я думаю, произойдет во время выполнения на стороне пользователя (например, сокет или ошибка файла). Почти все, что я использую, утверждает.
Кроме того, если я должен был отбросить утверждение, то какой хороший стандартный объект бросить? IIRC есть std:: logic_error, но это не хороший объект для броска? что бы я выбрал для отсутствующего файла или неожиданного ввода (например, из командной строки вместо внешнего приложения)?