C 異常處理

2021-10-25 05:58:52 字數 1798 閱讀 7088

《c++ primer》第五版 18.1 異常處理

關鍵字:throw、noexcept、try…catch、exception

異常處理(exception handle)機制事得**能將異常的檢測和解決過程分離開。檢測環節無需知道問題處理模組的所有細節。

throw表示式丟擲異常

try catch語句塊檢測並處理異常

exception用於在throw表示式和相關的catch子句之間傳遞異常的具體資訊

當乙個異常丟擲後,程式暫停當前函式的執行過程並立即開始查詢與異常匹配的catch子句,若在當前函式沒有找到,則會在呼叫當前函式的外部繼續查詢,沿呼叫鏈一直到找到為止。若最終都沒有找到則退出主函式後查詢過程終止。這個過程被稱為棧展開(stack unwinding)過程。

在棧展開的過程中,物件被自動銷毀。所以析構函式不應該丟擲不能被它自身處理的異常,否則將導致資源不能正確釋放。

noexcept可告知編譯器此函式不會丟擲異常,有助於編譯器優化操作。如果宣告了noexcept,而函式中又丟擲了異常,則程式會呼叫terminate,直接終止程式。

在c++11之前,通常使用throw()宣告函式異常:

class

a

c++11開始,使用noecxept宣告函式異常:

class

a

noexcept要不同時出現在函式的定義和宣告中,要不就都不出現。還可以在函式指標的宣告和定義**現:

typedef

void

(*pfun)

(int

)noexcept

;typedef

void*(

*pfun2)

(size_t)

;void

*write

(size_t v)

noexcept

intmain()

noexcept運算子是乙個一元運算子,返回乙個bool型別的右值常量表示式,用於表示給定的表示式是否會丟擲異常。和sizeof一樣,並不會對函式進行運算求值。

const

bool no_except =

noexcept

(malloc(0

));

void

*mymalloc

(size_t _size)

noexcept

(noexcept

(malloc

(_size)))

異常類

說明所在標頭檔案

exception

通用錯誤型別

exception

bad_alloc

new 錯誤

newruntime_error

執行時檢測出的錯誤

stdexcept

range_error

執行時錯誤:超出範圍錯誤

overflow_error

執行時錯誤:計算上溢

underflow_error

執行時錯誤:計算下溢

logic_error

程式邏輯錯誤

domain_error

邏輯錯誤:引數對應的結果值不存在

invalid_error

邏輯錯誤:無效引數

length_error

邏輯錯誤:長度超出範圍

out_of_error

邏輯錯誤:超出有效範圍

C 異常處理

結構化異常 structured exception vs c 異常 c exception 大家都知道c 異常是c 語言的乙個特性,使用者可以使用throw的方式來丟擲異常,try catch 來捕獲異常。結構化異常是諸如,zero divided,access violations等異常,這些異...

c 異常處理

一 概述 c 自身有著非常強的糾錯能力,發展到如今,已經建立了比較完善的異常處理機制。c 的異常情況無非兩種,一種是語法錯誤,即程式中出現了錯誤的語句,函式,結構和類,致使編譯程式無法進行。另一種是執行時發生的錯誤,一般與演算法有關。關於語法錯誤,不必多說,寫 時心細一點就可以解決。c 編譯器的報錯...

C 異常處理

程式設計師常常忽視異常處理的重要性,這給他們自己的 造成相當大損害。本文將討論如何在c 中使用異常處理,並介紹在應用 中新增 片段以防止某些錯誤的一些簡單方法,這些錯誤可能導致程式異常終止。結構化異常處理 net框架提供一種標準的錯誤報告機制稱為結構化異常處理。這種機制依賴於應用中報告錯誤的異常。在...