我有一个异常类如下:
#include <exception>
struct InvalidPathException : public std::exception
{
explicit InvalidPathException() {}
const char* what() const;
};
const char*
InvalidPathException::what() const {
return "Path is not valid";
}
在 GCC 4.4 下使用 -Wall -std=c++0x 编译时
错误:'virtual const char* InvalidPathException::what() const' 的更宽松的抛出说明符
错误:覆盖 'virtual const char* std::exception::what() const throw ()'
也非常正确,因为我正在覆盖确实具有异常说明符std::exception
的 's方法。但正如人们经常被告知的那样,我们不应该使用异常说明符。据我了解,它们在 C++11 中已被弃用,但显然尚未在带有 -std=c++0x 的 GCC 中。what()
throw()
所以我现在对最好的方法感兴趣。在我正在开发的代码中,我确实关心性能,因此担心经常提到的开销throw()
,但实际上这种开销如此严重吗?我是否认为我只会在what()
实际调用时遭受它,这只会在抛出这样的异常之后(同样对于从 std::exception 继承的其他方法都具有throw()
说明符)?
或者,有没有办法解决 GCC 给出的这个错误?