2010-06-07 132 views
2

可能重複:
C++ - Arguments for Exceptions over Return Codes哪個更好,拋出異常或返回非零值?

當你在做C++編程,你必須報告錯誤的兩種選擇。我想很多老師會建議你拋出一個異常,它是從std :: exception派生的。另一種可能更「C」風格的方式是返回一個非零值,因爲零是「ERROR_SUCCESS」。

明確地說,返回異常可以提供更多的錯誤和恢復信息;而代碼會膨脹一點點,至少在我看來,在你心目中保護異常安全有點困難。其他方式,如返回其他方式,將使報告錯誤更容易;缺點是管理恢復將是一個可能很大的問題。

因此,作爲優秀的程序員,人們會不會考慮老闆的意見?對於我來說,我想返回一些非零值。

+6

異常膨脹的代碼?我想在每個函數調用之後檢查一個非零的返回值比在某個戰略性地點嘗試捕獲要多得多。 – sth 2010-06-07 23:40:24

+0

請參閱http://stackoverflow.com/questions/1849490/c-arguments-for-exceptions-over-return-codes,http://stackoverflow.com/questions/99683/which-and-why-do-you-優先例外或返回碼, 等 – 2010-06-07 23:42:15

+0

是的,異常膨脹的代碼。至少這樣認爲來自Google http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Exceptions#Exceptions的人轉到了「例外」部分 – Tebe 2013-05-08 18:47:41

回答

6

C++ FAQ:使用例外的錯誤。

在我看來,這背後的邏輯是,使用返回碼,責任由您的代碼的調用者來檢查返回碼來處理錯誤。然後,這可以讓你的代碼的用戶潛在地陷入一個糟糕的境地。另一方面,例外情況是,必須處理,否則它們會喚起調用堆棧,直到它終止程序。在我看來,如果你正在編寫C++(並希望遵循C++習慣用法),並且想要使用錯誤處理,那麼異常就是要走的路。

1

大多數情況下,通過異常處理錯誤更容易。編寫異常安全代碼也很容易。我很懶。我走輕鬆的路線。

+0

這不是真的會花費更多編碼努力?你**做**檢查每個返回碼,不是嗎?相對於有一個try/exception包含一個代碼塊,它將成爲一個錯誤處理代碼,而不是許多代碼塊。 – Mawg 2015-06-03 06:49:26