Исключения в C++ предпочтительнее кодов возврата при обнаружении ошибок по нескольким причинам:
- Возможность объединять разные источники ошибок в одну сущность. 2 Например, с помощью исключений можно отличить нехватку памяти от деления на ноль или обрыва соединения на выходе из одной функции. 2
- Безопасность и удобство. 3 За счёт спецификации исключений компилятор гарантирует, что обработку ошибки не пропустят. 3 Кроме того, ошибки сами доставляются до подходящего обработчика. 3
- Возможность чётко разделить код, который обнаруживает ошибку, и код, обрабатывающий ошибку. 5 Это упрощает чтение и запись кода. 4
- Автоматическое перемещение ошибки на следующий уровень. 4 Если ошибка не может быть устранена на одном уровне, она автоматически переходит на следующий уровень. 4
Однако исключения не всегда предпочтительнее кодов возврата. 1 Их используют, когда ошибки возникают редко или проявляются очень жёстко. 1 Если же ошибки случаются часто и их источник заранее известен, то лучше применять коды возврата. 2