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
在丟擲派生型別物件時,不會將它們轉換為基型別物件。
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP