本文概述
- C ++
- C ++
C ++
#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块来捕获一个int。可能有人认为可以通过考虑ASCII值" x"来匹配int catch块。但是不会对catch块执行此类转换。考虑下面的程序作为另一个示例, 其中不为引发的对象调用转换构造函数。
C ++
#include <
iostream>
using namespace std;
class MyExcept1 {};
class MyExcept2
{
public :
// Conversion constructor
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块来捕捉基本类型时, 派生类型对象将转换为基本类型。看到
这个GFact
更多细节。
【C++中的catch块和类型转换如何理解()】如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
推荐阅读
- Accolite面试经验|S20(校园内)
- 操作系统是什么(详细介绍和指南)
- 如何将数据URI转换为文件然后追加到FormData()
- 算法(拆分数组并将第一部分添加到末尾)
- 算法设计(如何反转给定大小的组中的数组())
- 对两个给定的字符串进行交织,没有共同的字符
- Node.js如何使用Buffer.writeUInt32LE()方法()
- 什么是标准访问列表(ACL)(详细指南)
- PHP convert_uudecode()函数用法详解