VC ++ 2008/2010: является ли выбор throw () или __declspec (nothrow) лучшим выбором? - PullRequest
1 голос
/ 28 января 2012

При использовании VC ++ 2008 и 2010, какой маркер лучше использовать, чтобы указать, что функция не будет выдавать исключения:

  • throw() (стандарт C ++)
  • __declspec(nothrow) (Расширение MS)

Я читал несколько старых обсуждений на форуме, где люди говорили, что использование throw() может фактически заставить компилятор генерировать дополнительный код для перехвата исключений в случае, если функция сгенерирует (противмаркер).Их совет состоит не в том, чтобы использовать throw(), а вместо этого __declspec(nothrow), поскольку компилятор может использовать его для оптимизации.

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

1 Ответ

2 голосов
/ 28 января 2012

Стандартная форма noexcept, но VC ++ 2008 и 2010 не поддерживают это.

Лично я бы использовал макрос, определенный как throw() (или, может быть, даже ничего), пока компиляторы не начнут поддерживать C ++ 11 noexcept, а затем изменил бы его.

...