功能的try塊是功能機構的一種特殊形式,例如:做函數try塊對非構造函數有什麼缺點?
int f() try {
// function body
}
catch {
// one or more catch-clauses.
}
的主要目的是爲在構造的使用中,爲了記錄由任何鹼類的構造函數拋出的異常。但是,它也允許在常規功能中使用它們。
在這方面存在一些(相當古老)的問題,問我們爲什麼需要它用於常規功能,例如, Function try blocks, but not in constructors。然而,我的問題在另一個方面稍微有些變化:我可以在常規函數中使用它作爲常規嘗試塊的替代嗎?假設,僅僅出於美學原因?
我爲C++庫開發了C接口,需要用try塊封裝每個接口函數來捕獲任何異常。因此,我想避免每個功能的額外的花括號...
只是一件事,這引起了我的擔憂:在答案https://stackoverflow.com/a/11535436/6695750,davka引用了2000年的一篇文章,聲稱你可以' t從一個對應於功能嘗試塊的catch-block中返回一個值。我用gcc 5.4.0進行了測試,在那裏我可以從catch-block返回一個沒有問題的值。這是標準,還是gcc的非標準擴展?
我沒有看到任何陷阱,除了構造函數/析構函數rethrows。 – Jarod42
[你引用的第二個答案](http://stackoverflow.com/a/11535436/1023390)完全是錯誤的(並且在創建時已經如此)。 – Walter
一個(小)陷阱是它是意想不到的。如果你保持代碼簡單(C層只是調用C++層並處理異常),那很好。如果你的代碼隨着時間的推移變得越來越複雜/複雜(如我的一些代碼所做的那樣:)),這可能會變成多年來的殘酷 - 那麼你最好使用異常處理函數並將C++代碼作爲訪問者傳遞/ lambda。 – utnapistim