簡體   English   中英

如何關閉異常處理?

[英]How to turn off exception handling?

在“更有效的C ++(第15號)”一書中,我讀到如果啟用了異常,即使不使用異常,代碼也會變得非常慢。 在我看來,異常使用有限,我試圖避免它們,但這是另一個主題。

我不完全理解他的陳述:

  1. 啟用/禁用異常意味着什么? 它是零或多於零的try / catch塊之間的區別? 它是編譯器標志嗎? 如果我使用可能發生異常的DLL會發生什么?
  2. 假設沒有拋出任何異常:
    • 代碼整體變慢還是只是程序進/出的部分try / catch塊變慢? 據作者說,兩者都是真的。
  3. 如何編譯無例外? 即使我有try / catch塊,我可以這樣做嗎? 如果我使用的DLL可能會拋出異常,我可以這樣做嗎?

啟用/禁用異常意味着什么?

將標志傳遞給編譯器,該標志器禁用與異常相關的標准一致性,並使其不生成任何異常支持。

如果我使用可能發生異常的DLL會發生什么?

如果某個庫在內部處理異常,則沒有。 如果它讓它轉移到調用者(我從來沒有看到任何庫那樣做,因為ABI問題,但無論如何),你的程序崩潰(在最好的情況下),因為它無法處理它。 如果您的代碼包含DLL的包裝器並將錯誤代碼轉換為異常(常見發生),那么它就像您在代碼中使用異常一樣。

代碼整體變慢還是只是程序進/出的部分try / catch塊變慢? 據作者說,兩者都是真的。

請注意,您引用的書已經過時了。 編譯器正在發展。 現代編譯器使用零成本例外,如果不拋出異常,則不會產生性能成本。 異常處理確實使可執行文件更大,因為它應該生成處理異常所需的所有數據和代碼,但它不應該在非異常路徑上使它變慢。

如何編譯無例外? 即使我有try / catch塊,我可以這樣做嗎?

您以特定於編譯器的方式執行此操作。 請參閱編譯器文檔。 通常這樣做會使編譯器拒絕包含任何與異常相關的工具的代碼,例如指出try作為無法識別的標識符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM