2010-08-26 66 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

這意味着開發人員不使用有意義的函數名稱...