C 函式try語句塊

2021-10-06 21:43:46 字數 1266 閱讀 6472

語法

函式try塊是一種函式體的替代語法形式,是函式定義的一部分

try建構函式初始化器 復合語句 處理塊序列

(1)建構函式初始化器 - 成員初始化器列表,只在建構函式允許  

(2)復合語句 - 花括號環繞的語句序列,它組成函式體

(3)處理塊列表 - 乙個或多個catch子句的序列

解釋函式try塊將一系列catch子句與整個函式體,以及成員初始化器列表(若用於建構函式)關聯起來。從函式體中的任何語句,或(對於建構函式)從任何成員或基類的建構函式,或(對於析構函式)從任何成員或基類的析構函式中丟擲的搜友異常,以與常規try塊中丟擲的異常時相同方式,將控制轉移到處理塊序列中。

在進入任何建構函式上的函式try塊的catch子句前,所有完整建構函式的成員和基類都會被銷毀。

若函式try塊在委託建構函式上,而它呼叫的非委託建構函式成功完成,但之後該委託建構函式的函式體丟擲了異常,則將在進入函式try塊的任何catch子句之前完成此物件的析構函式。

在進入析構函式上的函式try塊的任何catch子句之前,所有的基類和變體成員均已被銷毀。

若由於建構函式或析構函式上的函式try塊的catch子句訪問基類或物件的非靜態成員,則其行為未定義。

建構函式的函式try塊中的每個catch子句都必須以拋異常終止。若控制抵達這種異常處理的尾部,則當前異常被如同用throw;來自動重拋。不允許在建構函式的函式try塊的任何catch子句中使用return語句。

抵達析構函式的函式try塊的catch子句末尾,也如同用throw;來自動重拋當前異常,但允許使用return語句。

對於所有其他函式,若函式返回型別為(可有cv限定的)void,則抵達catch子句末尾等價於return;否則行為未定義。

註解函式try塊的主要目的是應對從建構函式中的成員初始化器列表丟擲的異常,進行記錄並重拋,修改異常物件並重拋,丟擲乙個不同的異常,或終止程式。它們很少為析構函式或常規函式所用。

函式try塊不捕捉從按值傳遞的函式形參的複製/移動建構函式和析構函式中丟擲的異常:這些異常是在呼叫方的語境丟擲的。

執行緒的頂層函式的函式try塊不捕捉從執行緒區域性物件的建構函式和析構函式(但除了函式作用域的執行緒局域物件的建構函式)中丟擲的異常。

類似的,main()函式的函式try塊不捕捉從靜態物件的建構函式和析構函式(但除了函式局域靜態物件的建構函式)中丟擲的異常。函式形參(但並非宣告於函式自身中的任何物件)的作用域和生存期延續到處理塊序列的結尾。

try語句塊和異常處理

今晚看了一下c primer 的異常處理的簡單介紹,在這裡簡略記一下 異常處理機制包括異常檢測和異常處理 在c 中異常處理主要包括 throw表示式 用 throw 表示式來丟擲 引發 異常 那自然有接收 try語句塊 包含catch子句 用try語句塊來表示這段 可能會丟擲異常,丟擲的異常通常會被...

try語句塊和異常處理

在c 中,異常處理包括 throw表示式 throw expression 異常檢測部分使用throw表示式來表示它遇到了無法處理的問題。throw表示式丟擲乙個異常並把控制權轉移到能處理該異常的最近的catch子句。try語句塊 try block 異常處理部分使用try語句塊處理異常。try關鍵...

(30)try語句塊和異常處理

異常是指存在於執行時的反常行為,這些行為超出了函式正常功能的範圍。當程式的某部分檢測到乙個它無法處理的問題時,需要用到異常處理。異常處理機制為程式中異常檢測和異常處理這兩部分的協作提供支援。在c 語言中,異常處理包括 一.throw表示式,異常檢測部分使用throw表示式來表示它遇到了無法處理的問題...