關於c++的異常?
给我你的怀抱
给我你的怀抱 2017-06-30 09:57:21
0
3
1157
  1. 平常debug出的exception(如圖)和人為試圖判斷使用者輸入對錯的try throw異常有什麼本質區別嗎? 或者說平常談及c 的異常機制是不是包括前者,還是只是單純的指後者?

#上面提到的第一種異常是由什麼來判斷的, 例如圖裡的accedd violation, 是編譯器進行的判斷還是ide的其他工具?

给我你的怀抱
给我你的怀抱

全部回覆(3)
phpcn_u1582

@依雲 說的有道理,我做補充

  • c++的異常只能捕獲由c++拋出的異常。簡單來說,即它只能catch它自己(不限於你寫的程式碼,還包括運行庫)throw的異常。

  • 實際上c++拋出的異常並不算真正的異常,因為他只是被定義的,可預測的。真正的異常只有執行過後才被cpu觸發,也就是硬體拋出的例外。

  • 硬體不會直接理會c++,它會交給作業系統去處理。鑑於作業系統的不同,對異常的處理也是不一致的————但他們都不會交給上層語言。

  • 以相對完善的windows異常處理為例,它會

  1. 交給調試器(進程必須被調試)

  2. 執行VEH

  3. 執行SEH

  4. TopLevelEH(進程被調試時不會被執行)

  5. 交給調試器(上面的異常處理都說處理不了,就再次交給調試器)

  6. 呼叫異常埠通知csrss.exe

曾经蜡笔没有小新

記憶體讀取違例,是由硬體判斷,然後交由作業系統處理的。 (我不太懂 C++,不過這不像是 C++ 的異常,而是 Windows 拋出的異常。)

刘奇

沒有get到你的點,有些庫裡就自帶的異常類,也可以自訂異常類,最後都繼承自std::exception,本質上沒啥區別。還有就是這個是執行時期的異常,跟編譯器還有ide無關。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板