在更高效的C++(第15號)一書中,我發現如果啓用了異常,代碼將變得非常慢,即使它們未被使用。在我看來,例外是有限的使用,我儘量避免它們,但這是另一個話題。如何關閉異常處理?
我不完全理解他的說法:
- 是什麼啓用/禁用異常是什麼意思?它是有零還是多於零的try/catch塊之間的區別?它是一個編譯器標誌嗎?如果我使用可能發生異常的DLL,會發生什麼情況?
- 假設沒有異常被丟進:
- 代碼是否變得更慢作爲一個整體或者是隻有當程序進入零件/退出try/catch塊變慢?據作者說,兩者都是事實。
- 我該如何編譯沒有例外?我可以做到這一點,即使我有try/catch塊嗎?如果我使用的DLL可能會引發異常,我可以這樣做嗎?
這本書很舊,編譯器從此變得更聰明。今天體面的一個可以做到零開銷,使用指令地址的基於表的查找來查找堆棧解開時需要運行的代碼。但是,如果您想要了解它,然後查看編譯器選項,大多數都可以選擇禁用該功能。 –
「在我看來,例外是有限的使用,我儘量避免它們,但這是另一個話題。」我的猜測是你的代碼不會調用任何可能的系統調用。你正在編程CPU加熱器嗎? – 2016-03-08 18:22:17
@ user4590120:異常並不是處理故障的唯一方法。我使用返回代碼來檢查成功或失敗。 – Fabian