异常处理

时间:2011-06-20 18:59:38

标签: c++

#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_unexpected
set_terminate(dis);

输出

terminate disabled  
terminate disabled 

为什么会出现这种差异?

1 个答案:

答案 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作为最后一行。这将允许您将您的异常转换为您的函数声称将抛出的异常。