VC ++ 2008/2010:throw()或__declspec(nothrow)是更好的选择吗?

时间:2012-01-27 21:08:32

标签: visual-c++ exception throw declspec

使用VC ++ 2008和2010时,哪个标记最好用于表示函数不会抛出异常:

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

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

我做了一些搜索,但我无法得到真正有用的结果。根据我的理解,Boost库建议不要使用它们here__declspec(nothrow)是非标准的C ++,因此如果MS实现了异常规范,那么throw()行为可能会发生变化时,它将继续以相同的方式工作。

1 个答案:

答案 0 :(得分:2)

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

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