В c ++ стоимость зависит от реализации. В общем, есть два способа реализации исключений:
Первый - «настольный» подход. Компилятор создает набор таблиц для поиска, в момент, когда генерируется исключение, и куда идти. Когда выдается исключение, он должен искать в каждой таблице вверх по стеку вызовов, пока не найдет что-то, что перехватит это исключение. Поскольку все это основано на времени выполнения, вход или выход из catch catch не приводит к штрафу (хорошо), но создание исключения предполагает потенциально много поисков, что приводит к гораздо более медленному выбрасыванию. Лично я предпочитаю не платить за блоки try, потому что исключения должны быть очень редким обстоятельством. Это также увеличит размер исполняемых файлов, если они будут хранить таблицы.
Секунды - это «кодовый» подход. Каждый раз, когда код входит в блок try catch, концептуально местоположение блока помещается в стек. Это приводит к затратам при входе и выходе из блока try-catch, однако, когда выдается исключение, механизм времени выполнения может быстро выскочить из стека, чтобы найти, куда идти. Таким образом, генерирование исключений (намного?) Быстрее, но ввод блока теперь имеет свою стоимость. Помещение блока try-catch в узкую петлю низкого уровня может привести к значительным накладным расходам.
Вы должны проверить свой конкретный компилятор, чтобы увидеть, какой из них он использует.