次のような例外クラスがあります。
#include <exception>
struct InvalidPathException : public std::exception
{
explicit InvalidPathException() {}
const char* what() const;
};
const char*
InvalidPathException::what() const {
return "Path is not valid";
}
-Wall -std = c++0xを使用してGCC4.4でコンパイルする場合
エラー:'virtual const char * InvalidPathException :: what()const'のスロー指定子が緩い
エラー:オーバーライド'virtual const char * std :: exception :: what()const throw()'
確かに例外指定子を持っているstd::exception
のメソッドをオーバーライドしているので、まったく正しいです。ただし、多くの場合通知されるため、例外指定子を使用しないでください。そして私が理解しているように、それらはC ++ 11で非推奨になっていますが、-std = c++0xを使用したGCCではまだ明らかにされていません。what()
throw()
ですから、今のところ最善のアプローチに興味があります。私が開発しているコードでは、パフォーマンスを気にしているので、よく言及されるオーバーヘッドについて心配していますthrow()
が、実際には、このオーバーヘッドはそれほど深刻ですか?私what()
は、実際に呼び出されたときにのみ問題が発生するだろうと思っていますか?それは、そのような例外がスローされた後だけです(同様に、すべてにthrow()
指定子があるstd :: exceptionから継承された他のメソッドの場合)?
あるいは、GCCによって与えられたこのエラーを回避する方法はありますか?