C++ 中的 catch 塊和型別轉換


在本節中,我們將看到如何使用 catch 塊進行異常處理以及如何在 C++ 中進行型別轉換。

首先,讓我們看一個程式碼,我們將看到輸出是什麼以及它們是如何生成的。

示例

#include <iostream>
using namespace std;
int main() {
   try{
      throw 'a';
   }
   catch(int a) {
      cout << "Integer value is caught :" << a;
   }
   catch(...) {
      cout << "Entering into default catch block";
   }
}

輸出

Entering into default catch block

所以,背後的原因是什麼?為什麼生成這樣的輸出?正如我們所看到的,丟擲了字元“a”,但第一個 catch 塊是針對 int 的。如果我們認為“a”的 ASCII 碼是一個整數,那麼就會進入第一個塊,但 catch 塊不適用於這種轉換。

讓我們看另一個示例。在這個示例中,我們將看到針對丟擲的物件不會呼叫轉換建構函式。

示例

#include <iostream>
using namespace std;
class TestExcept1 {};
class TestExcept2 {
   public:
      TestExcept2 (const TestExcept1 &e ){ // Defining the Conversion constructor
         cout << "From the Conversion constructor";
      }
};
main() {
   try{
      TestExcept1 exp1;
      throw exp1;
   } catch(TestExcept2 e2) {
      cout << "Caught TestExcept2 " << endl;
   } catch(...) {
      cout << "Entering into default catch block " << endl;
   }
}

輸出

Entering into default catch block

在丟擲派生型別物件時,不會將它們轉換為基型別物件。

更新於:30-Jul-2019

119 次瀏覽

開啟您的職業生涯

完成課程即可獲得認證

立即開始
廣告