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
在丟擲派生型別物件時,不會將它們轉換為基型別物件。
廣告