При использовании VC ++ 2008 и 2010, какой маркер лучше использовать, чтобы указать, что функция не будет выдавать исключения:
throw()
(стандарт C ++) __declspec(nothrow)
(Расширение MS)
Я читал несколько старых обсуждений на форуме, где люди говорили, что использование throw()
может фактически заставить компилятор генерировать дополнительный код для перехвата исключений в случае, если функция сгенерирует (противмаркер).Их совет состоит не в том, чтобы использовать throw()
, а вместо этого __declspec(nothrow)
, поскольку компилятор может использовать его для оптимизации.
Я провел несколько поисков, но не смог найти действительно полезных результатов.Насколько я понимаю, библиотека Boost советует не использовать их здесь .__declspec(nothrow)
является нестандартным C ++, поэтому, если MS реализует спецификации исключений, он будет продолжать работать так же, пока поведение throw()
может измениться.