C++ 异常处理
然后程序终止了 但是当我写的时候,我没有想到C++ 异常处理,c++,C++,然后程序终止了 但是当我写的时候,我没有想到 terminate disabled 输出是 #include <iostream> using namespace std; #include <exception> void dis() { cout<<"terminate disabled "<< endl; } void display() throw(int,double) { if(0)
terminate disabled
输出是
#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;
}
set_terminate(dis);
为什么要这样做?所以,还不完全清楚您最初的输出是什么。我试着尽我所能把它清理干净,但是你的报价标签使它不明显 在代码中,如果使用
设置意外(dis)
,您应该看到:
terminate disabled
terminate disabled
terminate disabled
terminate disabled
在您的代码中,如果您使用设置\终止(dis)
,您应该看到:
terminate disabled
terminate disabled
terminate disabled
terminate disabled
在代码中,如果同时使用set\u unexpected(dis)
和set\u terminate(dis)
,您应该看到:
terminate disabled
terminate disabled
terminate disabled
terminate disabled
解决这个问题的一种方法是让dis
抛出0
作为最后一行。这将允许您将异常转换为您的函数声称将抛出的内容。您不应在下面使用命名空间std代码>语句。@als这是互联网上给出的GCC的Mingw端口。我宁愿去掉异常规范,也不愿找出它们。异常规范可能很难获取和保持正确,模板的工作非常糟糕,类型系统也很复杂,等等。我不明白,在他的代码中,displa()throw string(),在他的main()中,string Exception被捕获,不是吗?为什么会触发dis?@Alcott:他使用了一个。因此,函数应该只返回其中指定的类型。