2017-03-14 37 views
1

我是一個java開發人員,試圖維護一些非常古老的C++代碼(仍然需要使用vs2010編譯)。在C++中捕獲和重新拋出異常

我在家試圖理解無法測試的東西的例外,所以很抱歉,如果這個問題是愚蠢的。

你可以在低級函數中拋出一個異常,只是在頂部捕獲它,還是必須在每個級別上捕獲並重新拋出異常?

這很複雜,因爲我正在編寫本機代碼,調用託管代碼,調用c#,調用我的java rest資源。那麼在那裏我有什麼水平,我絕對必須趕上並轉換然後再投擲。

預先感謝您。

編輯:由於Jesper已經回答了上半場,我的本地代碼是否可以處理system :: exception?

+0

「沒有能力測試的東西」當然你可以測試http://ideone.com/nAwbt2。 – bolov

+4

_「是否有任何級別,我絕對必須抓住並轉換然後重新拋出」_是當你穿過ABI /語言邊界時。 –

+4

非常小心拋出異常。除非拋出站點和catch站點之間的代碼是在寫出例外安全(RAII等)的情況下編寫的,否則很容易搞亂程序狀態。這不像Java中那麼簡單。 – StoryTeller

回答

6

「你可以在低級函數中拋出一個異常,只是在頂部捕捉它」 - 是的。

「它是否必須在每個級別都被捕獲並重新拋出?」 - 沒有。