【发布时间】:2013-08-25 14:36:12
【问题描述】:
我正在尝试创建一个派生自 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 中运行良好,但在带有 -std=c++11 的 GCC 4.8 中无法编译:
错误:'virtual const char* UserException::what() const'的更宽松的抛出说明符
所以我加了noexcept:
virtual const char* what() const noexcept override
这在 GCC 中运行良好,但在 Visual Studio 中无法编译(因为 VS 2012 不支持 noexcept):
错误 C3646:“noexcept”:未知覆盖说明符
推荐的处理方法是什么?我想用两个编译器编译相同的代码,而且我正在使用 C++11 功能,所以我不能用不同的-std 编译。
【问题讨论】:
标签: c++ visual-studio-2012 c++11 noexcept