C++ 中的 Catch 块和类型转换
c++server side programmingprogramming
在本节中,我们将了解如何使用 catch 块进行 C++ 中的异常处理和类型转换。
首先,让我们看一段代码,我们将看到输出是什么,以及它们是如何生成的。
示例
#include <iostream> using namespace std; int main() { try{ throw 'a'; } catch(int a) { cout << "Integer value is caught :" << a; } catch(...) { cout << "进入默认 catch 块"; } }
输出
进入默认 catch 块
那么,这背后的原因是什么?为什么会产生这种输出?我们可以看到字符"a"被抛出,但第一个 catch 块是针对 int 的。如果我们认为"a"的 ASCII 是一个整数,那么将进入第一个块,但这种转换不适用于 catch 块。
让我们看另一个例子。在此示例中,我们将看到未对抛出的对象调用转换构造函数。
示例
#include <iostream> using namespace std; class TestExcept1 {}; class TestExcept2 { public: TestExcept2 (const TestExcept1 &e ){ // 定义转换构造函数 cout << "来自转换构造函数"; } }; 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
在抛出派生类型对象时,派生类型对象不会转换为基类型对象。