LINUX.ORG.RU

История изменений

Исправление Lrrr, (текущая версия) :

плохая идея. Ошибка тут в SomeFunc1 или SomeFunc2? придется писать код, выясняющий где оно случилось или иметь разные типы ошибок и разные ветви catch.

а чем iferr решает проблему разных типов ошибок? Правильно, ничем.

В golang мы стираем тип у err и вообще не особо паримся из-за аллокаций в куче - ну так и в C++ никто не запрещает наследовать исключения от std::exception и потом ловить этот базовый класс.

Обработка ошибки сразу после вызова функции короче, наглядней, требует меньше накладных расходов

нет конечно. Наоборот, за кучу ифов в коде ты платишь всегда, вне зависимости от того, возникают у тебя ошибки или нет. У исключений другой профиль. В C++ они очень дорогие, да, - но во первых нужна ли тебе производительность в случае ошибки, во-вторых это проблема не исключений как подхода, а занимающегося какой-то фигней комитета по стандартизации языка.

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

Исходная версия Lrrr, :

плохая идея. Ошибка тут в SomeFunc1 или SomeFunc2? придется писать код, выясняющий где оно случилось или иметь разные типы ошибок и разные ветви catch.

а чем iferr решает проблему разных типов ошибок? Правильно, ничем.

В golang мы стираем тип у err и вообще не особо паримся из-за аллокаций в куче - ну так и в C++ никто не запрещает наследовать исключения от std::exception и потом ловить этот базовый класс.

Обработка ошибки сразу после вызова функции короче, наглядней, требует меньше накладных расходов

нет конечно. Наоборот, за кучу ифов в коде ты платишь всегда, вне зависимости от того, возникают у тебя ошибки или нет. Исключения в C++ очень дорогие, да, - но во первых нужна ли тебе производительность в случае ошибки, во-вторых это проблема не исключений как подхода, а занимающегося какой-то фигней комитета по стандартизации языка.

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