我正在尝试创建一个派生自std::exception
并覆盖的自定义异常what()
。一开始,我是这样写的:
class UserException : public std::exception
{
private:
const std::string message;
public:
UserException(const std::string &message)
: message(message)
{}
virtual const char* what() const override
{
return message.c_str();
}
};
这在 VS2012 中工作正常,但它不能在 GCC 4.8 中编译-std=c++11
:
错误:'virtual const char* UserException::what() const'的更宽松的抛出说明符</p>
所以我补充说noexcept
:
virtual const char* what() const noexcept override
这在 GCC 中运行良好,但在 Visual Studio 中无法编译(因为 VS 2012 不支持noexcept
):
错误 C3646:“noexcept”:未知覆盖说明符
处理此问题的推荐方法是什么?我希望使用两个编译器编译相同的代码,并且我正在使用 C++11 功能,所以我不能使用不同的-std
.