Чем вызов throw лучше return? (если сам пишешь процедуру, а не использую готовую, где уже ничего не сделать)
В плане лучше? Ретурном ты можешь вернуть либо полезные данные, в которых зарезервировать часть диапазона значений под ошибки, либо просто возвращать код ошибки, а данные через указатели в параметрах
Ексепшен же явно специфицирует что он не связан с полезными данными и к ретурну отношения не имеет, только к ловящему блоку трай-кэтч