1

我一直在学习 C++,现在我的话题是异常处理。这本书说除了异常列表中的异常之外的任何东西都被阻止离开函数,所以我测试了它并期望程序由于未捕获的异常而终止。现在的问题是,异常列表被忽略了,我该如何处理呢?

int diva(int a, int b) 
throw(int, runtime_error)
{
    if (b == 0)
        throw invalid_argument("div by 0");

    return a/b ;
}

int main(int argc, char* argv[])
{
    set_terminate(errnote);
    try {
        diva(4,0);
    } catch(const invalid_argument& e) {
        cout<<e.what()<<endl;
    }

}

程序仍然执行并且异常仍然被捕获。

我也收到警告:

警告 1 警告 C4290:C++ 异常规范被忽略,除了指示函数不是 __declspec(nothrow) c:\users\siegfred\documents\visual studio 2012\projects\procpp\procpp\maindriver.cpp 20 1 ProCpp

4

1 回答 1

1

来自 MSDN

visual C++ 没有实现函数的异常规范。

throw( int, runetime_error )只是被编译器忽略并且没有效果。

于 2013-05-02T01:49:15.473 回答