Бросить или вернуть ошибку

Допустим, у меня есть следующая функция:

unsigned char *f(unsigned char*, int, int, long, const char*);

Я мог бы изменить возвращаемое значение на HRESULT (или мое собственное определение), но я должен изменить весь код внутри функции. Или я мог бы просто использовать throw указать на ошибку.

Мои вопросы:

  • Какие преимущества / недостатки возвращения HRESULT?
  • Какие преимущества / недостатки с throw?
  • И какой из них более безопасный?

Должен ли я использовать второй или это полностью зависит от того, что я предпочитаю?

РЕДАКТИРОВАТЬ: я не имел в виду строго использовать HRESULT , Вы можете определить свой собственный enum для обработки ошибок, чтобы быть независимым от Windows

2 ответа

Решение

Я бы сказал, что вы всегда должны прибегать к исключениям при работе с ошибками в C++. Посмотрим, почему в вашем случае это лучшая альтернатива.

Первый HRESULT это тип данных, используемый в операционных системах Windows, которые мгновенно делают ваш код непереносимым на платформе Linux.

Во-вторых, первый охватывает все другие аспекты.

Почему исключения лучше, чем коды ошибок?

1) Исключения отделяют ошибочный поток от нормального потока, который трудно получить с помощью кодов ошибок.

2) Иногда нет разумного кода ошибки, который вы могли бы отправить вызывающей стороне.

3) Существует большая ответственность за проверку того, произошел ли нормальный / ошибочный выход в отделе юзабилити, если вы используете коды ошибок. Однако неисследованное исключение приведет к полной остановке вашей программы.

Это всего лишь несколько преимуществ использования исключений над кодами ошибок.

Я бы сказал, что это полностью зависит от того, что вы предпочитаете. Нет никакого преимущества или недостатка перед другим (с вашим редактированием). Я, например, предпочитаю использовать throw потому что конечный пользователь вынужден делать какую-то проверку ошибок, поэтому я использую команду throw почти в любой ситуации.

Другие вопросы по тегам