c++异常列表被忽略

C++ exception list is ignored

本文关键字:列表 异常 c++      更新时间:2023-10-16

我一直在学习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++异常规范被忽略,除了to表示函数不是__declspec(nothrow) c:userssiegfreddocumentsvisual studio 2012projectsprocppprocppmaindriver.cpp 201 procpp

from MSDN

visual c++不实现函数的异常说明。

您的throw( int, runetime_error )被编译器简单地忽略,没有作用。