Visual c++ VC++;2008/2010:投掷()或uu declspec(诺思罗)是更好的选择吗?

Visual c++ VC++;2008/2010:投掷()或uu declspec(诺思罗)是更好的选择吗?,visual-c++,exception,throw,declspec,Visual C++,Exception,Throw,Declspec,使用VC++2008和2010时,哪个标记更适合用于指示函数不会引发异常: throw()(C++标准) \uu declspec(nothrow)(MS扩展) 我读过一些以前的论坛讨论,其中有人说使用throw()。他们的建议是不要使用throw(),而是使用\u declspec(nothrow),因为编译器实际上可以使用它进行优化 我做了一些搜索,但没有找到真正有用的结果。从我的理解来看,Boost库建议不要使用它们 *-DEXSPECH(NoWORKE)/CODE >是非标准C++,

使用VC++2008和2010时,哪个标记更适合用于指示函数不会引发异常:

  • throw()
    (C++标准)
  • \uu declspec(nothrow)
    (MS扩展)
我读过一些以前的论坛讨论,其中有人说使用
throw()。他们的建议是不要使用
throw()
,而是使用
\u declspec(nothrow)
,因为编译器实际上可以使用它进行优化


我做了一些搜索,但没有找到真正有用的结果。从我的理解来看,Boost库建议不要使用它们<代码> *-DEXSPECH(NoWORKE)/CODE >是非标准C++,因此如果MS实现异常规范,它将保持相同的工作方式,而 SUBER()(代码)>行为可能会发生变化。

< P>标准格式为<>代码>除< /代码>之外,但VC++ 2008和2010不支持此。
就我个人而言,我会使用一个宏,定义为
throw()
(甚至可能什么都没有),直到编译器开始支持C++11
noexcept
,然后更改它。

相关:。就我个人而言,我会说“两者都不是”。异常规范在c++中不是很有用:@CodyGray谢谢,我在搜索nothrow和_declspec,我找不到太多。CodyGray:请注意,所有这些问题现在都被一个新的标准确定了日期,这大大改变了允许的优化。相关:。这篇博文中的评论也值得一读。谢谢你的回答-我选择使用_declspec(nothrow),因为VC++编译器可以使用它来优化不需要的异常代码。