目录
1.catch块中的基本数据类型转换
参考下面程序的结果。
#include <iostream>
using namespace std;
int main()
{
try
{
throw 'x';
}
catch(int x)
{
cout << " Caught int " << x;
}
catch(...)
{
cout << "Default catch block";
}
}
运行结果:
Default catch block
上述程序中,字符'x'被抛出。最初的反应是整数catch块应该会捕获,考虑到'x'的ASCII值。但是catch代码块中是 不允许这样的转换的。
2.catch块中的类对象转换
下面例子演示了转换构造函数不会被调用。
#include <iostream>
using namespace std;
class MyExcept1 {};
class MyExcept2 {
public:
// 转换构造函数
MyExcept2(const MyExcept1& e) {
cout << "Conversion constructor called";
}
};
int main() {
try {
MyExcept1 myexp1;
throw myexp1;
}
catch (MyExcept2 e2) {
cout << "Caught MyExcept2 " << endl;
}
catch (...) {
cout << " Default catch block " << endl;
}
return 0;
}
运行结果:
Default catch block
不过有一种特殊情况需要注意:子类对象可以转换为基类对象,当抛出的是子类对象,并且有catch块捕获基类类型。