[問題] 什麼樣的"錯誤"該用例外處理
問題(Question):
除了使用STL或是第三方函式庫,我會特別注意需不需要catch例外以外,自己編寫
程式大多都還是用旗標或返回值的方式來處理錯誤,因為我對什麼情況下該使用例
外處理其實沒有什麼概念。
比方說書上在介紹例外處理的章節,大多都採用除0錯誤當成範例,但除0錯誤可
以藉由運算前檢查除數來避免,為什麼會特別為此定義一個例外呢?還有像是
fstream若開檔失敗,則是藉由檢查實例來偵測,為什麼不拋出std::system_error
來作為表示呢?因為沒辦法從中抓到一個明確的規律或依據,我不太懂得什麼樣
的場合或情境,使用例外處理而不是判斷旗標或返回值。
請問關於這部分是不是有什麼技巧或經驗可以請各位先進提點一下呢?
謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.112.157 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1632756033.A.4F8.html
推
09/28 00:02,
3年前
, 1F
09/28 00:02, 1F
→
09/28 00:04,
3年前
, 2F
09/28 00:04, 2F
→
09/28 00:07,
3年前
, 3F
09/28 00:07, 3F
→
09/28 00:07,
3年前
, 4F
09/28 00:07, 4F
→
09/28 00:18,
3年前
, 5F
09/28 00:18, 5F
→
09/28 00:18,
3年前
, 6F
09/28 00:18, 6F
→
09/28 07:13,
3年前
, 7F
09/28 07:13, 7F
推
09/28 11:33,
3年前
, 8F
09/28 11:33, 8F
→
09/28 11:35,
3年前
, 9F
09/28 11:35, 9F
→
09/28 11:35,
3年前
, 10F
09/28 11:35, 10F
→
09/28 11:36,
3年前
, 11F
09/28 11:36, 11F
→
09/28 11:36,
3年前
, 12F
09/28 11:36, 12F
→
09/28 11:36,
3年前
, 13F
09/28 11:36, 13F
→
09/28 11:37,
3年前
, 14F
09/28 11:37, 14F
→
09/28 11:38,
3年前
, 15F
09/28 11:38, 15F
→
09/28 11:39,
3年前
, 16F
09/28 11:39, 16F
推
09/28 13:00,
3年前
, 17F
09/28 13:00, 17F
→
09/28 13:01,
3年前
, 18F
09/28 13:01, 18F
→
09/28 13:01,
3年前
, 19F
09/28 13:01, 19F
推
09/28 14:20,
3年前
, 20F
09/28 14:20, 20F
→
09/28 14:20,
3年前
, 21F
09/28 14:20, 21F
→
09/28 14:22,
3年前
, 22F
09/28 14:22, 22F
→
09/28 14:23,
3年前
, 23F
09/28 14:23, 23F
→
09/28 14:24,
3年前
, 24F
09/28 14:24, 24F
→
09/28 14:25,
3年前
, 25F
09/28 14:25, 25F
→
09/28 14:25,
3年前
, 26F
09/28 14:25, 26F
→
09/28 14:26,
3年前
, 27F
09/28 14:26, 27F
→
09/28 14:27,
3年前
, 28F
09/28 14:27, 28F
→
09/28 14:28,
3年前
, 29F
09/28 14:28, 29F
→
09/28 15:30,
3年前
, 30F
09/28 15:30, 30F
推
09/28 17:01,
3年前
, 31F
09/28 17:01, 31F
→
09/28 17:02,
3年前
, 32F
09/28 17:02, 32F
→
09/28 17:04,
3年前
, 33F
09/28 17:04, 33F
→
09/28 17:06,
3年前
, 34F
09/28 17:06, 34F
→
09/28 17:06,
3年前
, 35F
09/28 17:06, 35F
→
09/28 17:07,
3年前
, 36F
09/28 17:07, 36F
→
09/28 17:07,
3年前
, 37F
09/28 17:07, 37F
→
09/28 19:34,
3年前
, 38F
09/28 19:34, 38F
→
09/28 19:36,
3年前
, 39F
09/28 19:36, 39F
→
09/28 19:38,
3年前
, 40F
09/28 19:38, 40F
→
09/28 19:39,
3年前
, 41F
09/28 19:39, 41F
→
09/28 19:42,
3年前
, 42F
09/28 19:42, 42F
→
09/28 19:47,
3年前
, 43F
09/28 19:47, 43F
→
09/28 19:47,
3年前
, 44F
09/28 19:47, 44F
→
09/28 19:52,
3年前
, 45F
09/28 19:52, 45F
→
09/28 19:52,
3年前
, 46F
09/28 19:52, 46F
→
09/28 19:52,
3年前
, 47F
09/28 19:52, 47F
推
09/28 22:57,
3年前
, 48F
09/28 22:57, 48F
→
09/28 22:57,
3年前
, 49F
09/28 22:57, 49F
→
09/28 22:57,
3年前
, 50F
09/28 22:57, 50F
→
09/28 22:57,
3年前
, 51F
09/28 22:57, 51F
推
09/28 23:25,
3年前
, 52F
09/28 23:25, 52F
推
09/28 23:32,
3年前
, 53F
09/28 23:32, 53F
想延伸請教一個用例:假如我要存取一個未知長度std::vector中的某個元素,可以先使用size()確認元素位址是否合理再進行[]存取、也可以直接用at()存取當元素不存在會throw std::out_of_range,以語法長度來看其實兩者都差不多,但這是明顯可預期會發生的異常,例外處理的資源成本也比較多高,是否代表使用前者會比較合適呢?
※ 編輯: icetofux (111.71.102.71 臺灣), 09/29/2021 08:40:27
→
09/29 12:38,
3年前
, 54F
09/29 12:38, 54F
→
10/01 00:04,
3年前
, 55F
10/01 00:04, 55F
→
10/01 00:05,
3年前
, 56F
10/01 00:05, 56F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
8
56
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章