2013-08-02 57 views
0

有許多方法可以創建從其他例外派生的新例外。一種方法是使用類似this創建來自現有的新例外

struct MyException : public exception 
{ 
    const char * what() const throw() 
    { 
    return "C++ Exception"; 
    } 
}; 

,另一個方法是調用基類的構造函數。

class My:public runtime_error 
{ 
public: 
    My(string s):runtime_error(s){} 
}; 

第二種方法顯然是給我的好處插入(在創作)是由什麼()方法的輸出字符串。我的問題是我應該選擇哪種方法,以及我是否需要使用第一種方法。

回答

1

如果您真的只想使用字符串,您可以選擇第一個選項,但第二個選項是您在任何地方都可以看到的默認選項。

但事實並非如此,如果他們以後決定擴展C++異常類,並根據異常字符串提供第二種方法,則會遇到問題。所以我沒有看到任何理由使用第一個版本。

BTW:什麼()是noexceptthrow()

+0

「爲const char *什麼()const的noexcept」 不能編譯。我在「http://www.cplusplus.com/reference/exception/exception/exception/」注意到這個「noexcept版本」,但它沒有編譯。 – Slazer

+1

什麼是編譯器錯誤?很可能您的編譯器不完全支持C++ 11。 –

+0

錯誤連同代碼在http://pastebin.com/PQ8ZhV24 編譯器是「g ++(GCC)4.7.2 20120921(Red Hat 4.7.2-2)」 – Slazer

相關問題