Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Таки не *просто* хинт 07.03.09 22:29 Число просмотров: 2623
Автор: amirul <Serge> Статус: The Elderman
|
> > Ни фига не хинт. Компилер должен сгенерировать код, > который > > ОБЯЗАН дернуть unexpected в случае нарушения > спецификации. > Ну, размер кода сейчас уже наверное нигде не критичен. > > > Все проверки - рантаймовые. > Только в случае если эксепшн все же вылетит - это > исключительная ситуация, быстродействие которой не > критично. Нет, функция, которая ничего не ловит может не иметь try блока. В случае с исключениями он нужен всегда (особенно при асинхронных исключениях типа VC-шных /EHa) и вот тут уже платит не тот кто испольует (исключение), а все.
> > Более того, все, что делается спецификациями > исключений > > можно довольно тривиально сделать и вручную. Обеспечив > себе > > при этом бОльшую гибкость в реакции на unexpected, да. > > А вот пример того, как этот хинт помогает при оптимизации: > http://blogs.msdn.com/larryosterman/archive/2006/03/22/5583 > 90.aspx Как описано в бусте: самая большая проблема со спецификациями в том, что программисты имеют тенденцию понимать их не так, как они на самом деле работают. Это не хинт компилятору, что исключения не бросаются (это он может обнаружить и просто посмотрев на тело), это ТРЕБОВАНИЕ обеспечить В РАНТАЙМЕ отсутствие иных исключений, кроме специфицированных. Если исключения асинхронные - в любом месте может случиться любое исключение и в эту простешую функцию добавится еще и try блок, который будет ловить и перебрасывать "хорошие" исключения и вызывать unexpected для "плохих". Если бы спецификации не было то же самое асинхронное исключение просто раскрутило бы стек этой функции и прошло дальше незамеченным.
> ИМХО, использование throw() для тривиальных функций типа > bool empty() const throw() {return content.size();} > может все же оказаться полезыным, и в то же время > безопасным. Для инлайновых функций вообще никаких спецификаций никогда не следует указывать.
|
|
|