#include <iostream>
using namespace std;
#include <exception>
void dis()
{
cout<<"terminate disabled "<< endl;
}
void display() throw(int,double)
{
if(0)
throw int();
if(0)
throw double();
if(1)
throw string();
}
int main()
{
set_unexpected(dis);
try
{
display();
}
catch(int)
{
cout<<"int "<< endl;
}
catch(double)
{
cout<<"double "<< endl;
}
catch(string)
{
cout<<"string "<< endl;
}
system("pause");
return 0;
}
现在输出
terminate disabled
然后程序终止
但是当我写
时,而不是set_unexpectedset_terminate(dis);
输出
terminate disabled
terminate disabled
为什么会出现这种差异?
答案 0 :(得分:1)
所以,你的原始输出是什么并不完全清楚。我试图尽可能地清理它,但你的引用标签使它不明显。
在您的代码中,如果您使用set_unexpected(dis)
,则应该看到:
terminate disabled
如果您使用set_terminate(dis)
,请在代码中看到:
terminate disabled
在您的代码中,如果同时使用set_unexpected(dis)
和set_terminate(dis)
,您应该看到:
terminate disabled
terminate disabled
解决此问题的一种方法是将dis throw 0
作为最后一行。这将允许您将您的异常转换为您的函数声称将抛出的异常。