2010-08-26 65 views

回答

10
void Foo() throw; 

这是一个syntax error。为异常规范(C++ 98 § 15.4)的语法是:

异常规范:

throw(型-ID列表选择)

请注意括号是必需的。


在另一方面,

void Foo() throw(); 

意味着函数Foo()不会引发任何异常。

+5

扔你的Foo()是不礼貌的。抱歉。我只是忍不住自己。 – gregg 2010-08-26 13:01:41

+3

投掷的括号非常重要。您可以命名可能抛出的异常类型。如果它们是空的,如图所示,这意味着Foo()将抛出没有(“预期的”)异常。关于使用异常规格有不同的意见。这里有一个:http://www.gotw.ca/publications/mill22.htm。 – gregg 2010-08-26 13:11:17

2

void Foo() throw;是形成不良。

相反void Foo() throw();意味着函数“富”的声明,这样它不抛出任何异常

$ 15.4/10 - 。“没有 异常规范的函数允许所有 异常与函数empty exceptionspecification,throw(), 不允许任何异常。“

+2

请注意,在**运行时**检查异常规格,这意味着一些开销,并且如果试图抛出一个非正则表达式,则会引发std :: bad_exception(通常会导致调用“unexpected”函数)匹配异常。 – 2010-08-26 13:02:53

0

在一次采访中,这个问题提供了一个很好的机会来谈论异常检查; C++和Java之间的差异;您的个人偏好和意见;当异常检查受到伤害或帮助时,等等。这种问题不是关于句法规则的字面正确的单个句子答案,而是更多关于邀请谈论你编程和思考的方式的问题。如果你假装知道的比你多,或者你的哲学与他们的哲学非常不同,那么这可能是危险的。

+3

这应该是一个评论,因为它不回答这个问题。 – cake 2010-08-26 13:08:53

+0

它回答了这个问题:“当我在面试中被问及时该说些什么?”这不同于“我在另一个人的代码中遇到过这个 - 这是什么意思?” – 2010-08-26 14:45:52

0

这意味着开发人员不使用有意义的函数名称...