我想實現一個新的異常,我們的代碼庫和我在SO跨越此帖一:爲什麼要在方法的定義中使用throw?
https://stackoverflow.com/a/8152888/654019
,但我不知道爲什麼什麼方法定義如下:
virtual const char* what() const throw(){
return msg_.c_str();
}
throw在這種情況下的含義是什麼?
我想實現一個新的異常,我們的代碼庫和我在SO跨越此帖一:爲什麼要在方法的定義中使用throw?
https://stackoverflow.com/a/8152888/654019
,但我不知道爲什麼什麼方法定義如下:
virtual const char* what() const throw(){
return msg_.c_str();
}
throw在這種情況下的含義是什麼?
這是dynamic exception specification,從C++ 11開始已棄用,並從C++ 17中刪除。
throw()
用於指定函數不會拋出任何異常(直接或間接),從C++ 11我們應該使用noexcept
或noexcept(true)
來代替。
'noexcept'被添加到C++ 11中。所以雖然說你不應該在C++ 17中使用它,但是你不應該在C++ 11中使用動態異常規範。 –
@NicolBolas你的意思是'throw()'不應該在C++ 11以後使用,所有的動態異常說明不應該在C++ 17以後使用。理解是否正確? – songyuanyao
那麼,你不應該在C++ 11中使用任何動態異常規範,因爲它們已被棄用。只是C++ 17最終刪除了所有非空的。 –
請參閱[本文](http://stackoverflow.com/q/1055387/335858)。 – dasblinkenlight
@dasblinkenlight ok,所以它說代碼不會產生任何異常。 – mans
在新代碼中,您可能希望使用'noexcept'。 –