Цитата, вынесенная в заголовок, уже стала крылатой (вот источник: "Основы COM" Дейл Роджерсон). И правда, могут...
Visual C++ departs from the ANSI Standard in its implementation of exception specifications. The following table summarizes the Visual C++ implementation of exception specifications:
...
throw(type): The function can throw an exception of type type. However, in Visual C++ .., this is interpreted as throw(...). (MSDN)
10 комментариев:
О да, заманали они со своим отношением к стандартам.
Было бы о чём жалеть.
Использовать спецификацию исключений в С++ - себе дороже.
не такое уж это и горе - throw(type), работающее по стандарту, чуть ли не хуже, чем если писать вообще без throw спецификации
и потому многие (даже Страуструп) рекомендуют статическую проверку спецификации сторонними инстументами
в студии Team Edition такой инструмент, насколько помню, есть
Left, имеются конкретные факты или это субъективный личный опыт?
alek86, сдается мне что Вы перевираете старика Страуструпа.
Ну, во-1 это говорит главный С++-гуру современности - Herb Sutter ;)
А во-2 - реально даже в Java где checked exceptions сделаны правильно (т.е. проверяются в compile-time, а не в runtime) - эти самые checked exceptions очень быстро становятся Pain-In-Ass. Слишком быстро наталкиваешься на то что прописывая спецификацию исключений у предка ты накладываешь очень серьёзные ограничения на имплементацию потомка. Да и потом, держать в уме не только иерархию классов модели данных но ещё и иерархию классов исключений - непозволительная роскошь ;) Ну и реально при правильном exception-safe кодирование (которое есть гуд и к которому нужно стремиться всегда) конкретному коду должно быть плевать на тип исключения ;)
Left, пруфлинк на Herb Sutter'а в студию.
Ну а то что во вторых, ссылкой на Java меня не напугать, сам там был. Видимо у вас случай такой был особеннный, кривой by design.
Использовать исключения или нет - действительно особый разговор, и к чему стоит стремиться - каждый определяет сам для себя. Или за него определяют соглашения по кодированию в конкретном проекте ;).
http://www.gotw.ca/publications/mill22.htm
Использовать исключения безусловно нужно.
Использовать checked exception не нужно, даже если они поддерживаются языком корректно.
А вот выбор между тем что является а что не является исключительной ситуацией - вот это уже далеко не так тривиально.
Для примера - есть функция чтения из файла. Так вот, если на диске попадается bad-block - то каждый вменяемый программист бросит exception и будет прав - ситуация действительно исключительная, происходит 1 раз на многие миллионы вызовов. Каждый, кроме одного - того кто пишет утилиту которая читает данные с повреждённых дисков. Для него эта ситуация вовсе не исключительная а вполне себе штатная. Если он будет каждый раз ловить исключения то это во-1 размажет логику во-2 просадит производительность. Так что этому программисту обычный интерфейс функции чтения из файла уже будет неприемлим. Ему нужно что-то более универсальное и одновременно менее удобное в повседневном использовании. Вот это и есть вопрос выбора бросать исключения или нет (пример я наверное привёл слегка надуманный, но думаю из него ясно о чём это я).
Left, большое спасибо и за ссылку, и за комментарии. Пожалуй, постараюсь подготовить расширенную статью про исключения :).
Отправить комментарий