1

使用 VC++ 2008 和 2010 时,最好使用哪个标记来指示函数不会引发异常:

  • throw()(C++ 标准)
  • __declspec(nothrow)(MS 扩展)

我阅读了一些较早的论坛讨论,其中人们说使用throw()实际上可能会强制编译器生成额外的代码来捕获异常,以防函数抛出(针对标记)。他们的建议不是使用throw()而是使用__declspec(nothrow),因为编译器实际上可以使用它进行优化。

我进行了一些搜索,但找不到真正有用的结果。据我了解,Boost 库建议不要在此处使用它们。__declspec(nothrow)是非标准 C++,所以如果 MS 实现异常规范,它会继续以相同的方式工作,而throw()行为可能会改变。

4

1 回答 1

2

标准格式是noexcept,但 VC++ 2008 和 2010 不支持。

就个人而言,我会使用一个宏,定义为throw()(或什至什么都没有),直到编译器开始支持 C++11 noexcept,然后更改它。

于 2012-01-27T21:34:44.067 回答