R>Общие выводы какие возникли – возвращаемые значения типа писсимистической стратегии – т.е. чуть что сделали сразу проверяем, а не плохо ли всё, исключения – оптимистическая стратегия – делаем всё подряд без разбора и проверок, авось всё хорошо.
Наоборот, при кидании исключения мы никогда не пройдем мимо ошибок (если конечно catch(...) не использовать). И будем обрабатывать ошибку на том уровне, на которм надо, а в случае возрата, нам еще надо передать управление на другой уровень, если обработка идет там.
R>В принципе возникает такое ощущение, что исключения всё-таки немного быстрее (если не происходит ошибок). Соответственно если для какой-то функции вероятность провала более 1%, то надо использовать коды возврата, если менее 1%, то надо использовать исключения для повышения производительности. Да-да, вы не ослышались – для поднятия производительности надо использовать исключения.
1% это очень много. Изначально использовал исключения и не сомневался, в этом. В обработке ошибок производительность занимает далеко не первое место.
R>Так же стоит отметить, что в msvc8 по сравнению с msvc71 резко снизилась стоимость кидания исключения. Но тут у них есть предел, т.к. исключения реализованы поверх SEH, значит кидание исключения всегда будет связано с переходом в ядро.
SEH для С++ с ядром не имеет ничего общего. Это всего лишь цепочка блоков. Вряд ли исключения изменились, возможно оптимизировали деструктор или вызовы его уменьшили. или FPO оптимизацию подняли.
R>Так же очевидно, что использование возвращаемых значений под С++ — это совсем плохая идея – издержки от двух стихий, а плюсов нет в противопоставление с возвращаемыми значениями под С. R>Ещё момент — при использовании исключений принципиально различается кодогенерация в зависимости от того, есть ли в функции локальные объекты/аргументы с нетривиальными деструкторами — если нет, то просто идут вызовы других функций, если есть, то тут уже начинается: занесение фрейма на стек, подсчёт сконструированных объектов, снятие фрейма со стека. Получается значительная разница и по скорости и по размеру кода.