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