Re: [問題] try catch(...)的問題

看板C_and_CPP作者 (我要加入劍道社!)時間14年前 (2011/10/28 16:05), 編輯推噓3(3011)
留言14則, 4人參與, 最新討論串2/5 (看更多)
基本上我覺得書上都會有答案... ※ 引述《QQ29 (我愛阿蓉)》之銘言: : try : { : 1. throw; //跑到這行就掛了? 不指定 exception object 的意思是在 catch block 中重丟 exception 比如說: try{ ... }catch(...){ Log("Some exception happened!"); throw; } 這邊的 throw 會把同一個 exception 物件繼續往上一層丟 而你沒弄懂它是拿來 rethrow 而把它放在 catch block 以外的地方 依照 C++ 標準 15.1p8: If no exception is presently being handled, executing a throw- expression with no operand calls terminate() (15.5.1). : 2. throw exception(); //會進到catch : 3. int a, b = 0; a= 1/b; //catch不到.... : 4. int *ptr = 0; *ptr = 5566; //catch 不到 : } : 我比較想了解 為啥 1,3,4都catch不到 1 和 2 有什麼差異嗎? 一併解釋 3 和 4 原因很簡單就是 C++ 重視執行效率 所以規定 3 和 4 是 undefined behavior 如果對這兩種情況都需要拋出 exception 那麼程式碼的執行效率會大幅降低 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.3.139

10/28 16:32, , 1F
l大意思是說...有些很蠢的人造exception 是無法catch得到嗎?
10/28 16:32, 1F

10/28 16:32, , 2F
因為我比較熟C#....他啥都可以吃 我以為C++也是這樣...
10/28 16:32, 2F

10/28 16:33, , 3F

10/28 16:33, , 4F
我自己估到這網頁 他中間好像有講到我實驗的null pointer
10/28 16:33, 4F

10/28 16:34, , 5F
不過他似乎是說可以catch的到 win2000系統....我現在是VC
10/28 16:34, 5F

10/28 16:34, , 6F
+win7 難道行為會有差嗎? 這是OS define的嗎
10/28 16:34, 6F

10/28 16:35, , 7F
這樣感覺C++的exception只能catch 明文規定的type 和自訂的?
10/28 16:35, 7F

10/28 16:35, , 8F
而C#是把3和4都算是一種 exception type嗎
10/28 16:35, 8F

10/28 16:46, , 9F
推 :)
10/28 16:46, 9F

10/28 16:59, , 10F
無法catch到的原因不是因為它很蠢,而是catch要成本
10/28 16:59, 10F

10/28 17:00, , 11F
因為compiler不知道這段code被誰呼叫、以及呼叫端是否
10/28 17:00, 11F

10/28 17:00, , 12F
有做catch,所以如果你希望null access可以被catch到
10/28 17:00, 12F

10/28 17:01, , 13F
那麼compiler要在所有的指標操作前加上null check
10/28 17:01, 13F

10/28 23:09, , 14F
推:)
10/28 23:09, 14F
文章代碼(AID): #1Egc8-fT (C_and_CPP)
文章代碼(AID): #1Egc8-fT (C_and_CPP)