2013-05-02 54 views
1

我一直在學習C++,現在我處於異常處理的主題。這本書說除異常列表中的例外之外的任何東西都不能離開函數,所以我測試了它,並期望程序由於未捕獲的異常而終止。現在的事情是,例外列表被忽略,我該如何處理?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(拋出異常)C:\用戶\ siegfred \文件\的Visual Studio 2012 \項目\ procpp \ procpp \ maindriver.cpp 20 1 ProCpp

+2

不推薦使用異常規範,只推薦使用'throw()'pre C++ 11和'noexcept',以C++ 11開頭。 'throw()'和'noexcept'意思基本上是一樣的:我保證我不會拋出任何東西,我也不會允許任何異常逃脫。 – 2013-05-02 01:59:47

回答

1

from MSDN

視覺C++未實現的功能異常規範。你的throw(int, runetime_error)被編譯器忽略,不起作用。

+0

yup,用'throw(int,runtime_error)'試試' – FJam 2013-05-02 01:50:55