2017-01-09 138 views
3

我創建了一個小的異常類。我想要不拋出的構造,但由於某些原因,編譯器告訴我,構造函數可能拋出,儘管「一網打盡」的處理程序:C++爲什麼會拋出?

invalid_csv::invalid_csv(size_t r, size_t c, const char * msg) throw() 
try : 
    std::runtime_error(msg), 
    row(r), 
    col(c), 
    m_init_ok(true) 
{ 
} 
catch(...) 
{ 
    m_init_ok = false; 
} 

warning C4297: 'csvrw::invalid_csv::invalid_csv': function assumed not to throw an exception but does 

爲什麼呢?謝謝。

+2

創建[MCVE] – user2079303

回答

4

要解析C4297,不要試圖在聲明__declspec(nothrow),noexcept(true)或throw()的函數中拋出異常。或者,刪除noexcept,throw()或__declspec(nothrow)規範。

Source

所謂的功能試塊這樣不能防止異常會得到外面。考慮到構造函數無法完成執行,因此該對象從未完全構造。漁獲塊有別的扔東西或當前異常將被重新拋出

this answer

+0

謝謝,但這個會隱瞞問題,不解決它。 – Virus721

+1

@ Virus721請閱讀這個答案的解釋http://stackoverflow.com/questions/26267331/function-try-block-and-noexcept – parik

+1

謝謝。請將此添加到您的答案中。 – Virus721

相關問題