2017-04-02 49 views
2

我想實現一個新的異常,我們的代碼庫和我在SO跨越此帖一:爲什麼要在方法的定義中使用throw?

https://stackoverflow.com/a/8152888/654019

,但我不知道爲什麼什麼方法定義如下:

virtual const char* what() const throw(){ 
    return msg_.c_str(); 
} 

throw在這種情況下的含義是什麼?

+0

請參閱[本文](http://stackoverflow.com/q/1055387/335858)。 – dasblinkenlight

+0

@dasblinkenlight ok,所以它說代碼不會產生任何異常。 – mans

+0

在新代碼中,您可能希望使用'noexcept'。 –

回答

1

這是dynamic exception specification,從C++ 11開始已棄用,並從C++ 17中刪除。

throw()用於指定函數不會拋出任何異常(直接或間接),從C++ 11我們應該使用noexceptnoexcept(true)來代替。

+0

'noexcept'被添加到C++ 11中。所以雖然說你不應該在C++ 17中使用它,但是你不應該在C++ 11中使用動態異常規範。 –

+0

@NicolBolas你的意思是'throw()'不應該在C++ 11以後使用,所有的動態異常說明不應該在C++ 17以後使用。理解是否正確? – songyuanyao

+0

那麼,你不應該在C++ 11中使用任何動態異常規範,因爲它們已被棄用。只是C++ 17最終刪除了所有非空的。 –

相關問題