> > Вот тебе ЦИТАТА из ISO/IEC 14882 > У меня нет под рукой сейчас исходников (не держу дома :-)), > но что-то мне подсказывает, что они и для empty() не Из VC9 stl-я:
void resize(size_type _Newsize)
{ // determine new length, padding with _Ty() elements as needed
resize(_Newsize, _Ty());
}
void resize(size_type _Newsize, _Ty _Val)
{ // determine new length, padding with _Val elements as needed
if (size() < _Newsize)
_Insert_n(end(), _Newsize - size(), _Val);
else if (_Newsize < size())
erase(begin() + _Newsize, end());
}
---
Спецификаций нет даже для ресайза.
> объявляют throw(). Хотя могли бы. Это скорее вопрос > исторический. Нет, не исторический. В C++0x к тем же ресайзам не моргнув глазом добавили концепты. Ну а первое появление спецификаций исключений как раз и появилось в стандарте - даже об "обратной совместимости" думать не надо.
> > Такое "бывает" разве что в third-party коде. Ты еще и > за > > него отвечать хочешь? > Не вижу большой трудности: > catch(...) { > writeLog("Упало здесь"); > throw MyOwnException(); > } Хых. И зачем тебе это? Точно так же ты можешь просто сделать catchall на самом верхнем уровне и сделать там "Упало здесь". Вот только каждая спецификация на пути это catch-rethrow. Не очень эффективно.
> Разница в том что имеет разработчик, который будет жергать > функции моего класса. Нет, он будет либо иметь эксепшн из твоего класса, если ты соответствуешь собственным спецификациям, либо unexpected - если не соответствуешь. И на хрена ему твой unexpected? Может у него другие мысли по поводу того, как он собирается следить за исключениями?
> > Да, но ты его видишь СОВЕРШЕННО не там. Никакие > > спецификации исключений не помогут тебе отловить > > разыменование нулпоинтера (буду повторять, пока ты не > > осознаешь :-) ). > Не осознал. Пользователь нажал на кнопку. В обработчике > попытался разыменоваться нулл-поинтер. Я словил эксепшен. В Хорошо, раз не осознал, то для начала скажи КАКОЙ эксепшон ты словил?
> функции, где это непосредственно произошло - отписываю в > лог, что "вот здесь упало", а наверх пробрасываю > типизированный эксепшн по которому могу уже принять Допустим ты использовал транслятор (никоим боком не относящийся собственно к плюсам) и таки бросил плюсовый эксепшон в ответ на хардварную ошибку. В каком месте здесь спецификации исключений?
> какое-то решение (например, извиниться за ошибку в данном > конерктном функционале, но продолжить работу всей остальной > программы). Ага. Именно для этого сделаны эксепшены. Их спецификации сделаны для другого и это другое в целом не нужно.
> > http://www.gotw.ca/publications/mill22.htm (+ссылки в > конце > > > http://www.boost.org/development/requirements.html#Exceptio > Интересно. Да, таки многое стало понятнее. > > Вывод, какой я сделал: либо throw(...) в качестве меты, > если хочу дополнительно подчеркнуть, что к функции надо > отнестись внимательнее, либо throw() для случая совсем > банальных функций типа getsize() в целях оптимизации (см. > мой ответ выше по ветке). Ага.
|