使用 VC++ 2008 和 2010 时,最好使用哪个标记来指示函数不会引发异常:
throw()
(C++ 标准)__declspec(nothrow)
(MS 扩展)
我阅读了一些较早的论坛讨论,其中人们说使用throw()
实际上可能会强制编译器生成额外的代码来捕获异常,以防函数抛出(针对标记)。他们的建议不是使用throw()
而是使用__declspec(nothrow)
,因为编译器实际上可以使用它进行优化。
我进行了一些搜索,但找不到真正有用的结果。据我了解,Boost 库建议不要在此处使用它们。__declspec(nothrow)
是非标准 C++,所以如果 MS 实现异常规范,它会继续以相同的方式工作,而throw()
行为可能会改变。