0

有很多方法可以创建从其他异常派生的新异常。一种方法是使用这样的东西

struct MyException : public exception
{
  const char * what () const throw ()
  {
    return "C++ Exception";
  }
};

另一种方法是调用基类的构造函数。

class My:public runtime_error
{
public:
    My(string s):runtime_error(s){}
};

第二种方法显然给了我插入(在创建时)what() 方法输出的字符串的优势。我的问题是我应该更喜欢哪种方法以及是否需要使用第一种方法。

4

1 回答 1

1

如果您真的只想使用字符串文字,您可以选择第一个选项,但是,第二个是您随处可见的默认值。

但是,ATM 并非如此,如果他们决定稍后扩展 C++ 异常类,则使用基于异常字符串的第二种方法,您会遇到问题。所以我看不出有任何理由使用第一个版本。

顺便说一句:what()noexcept不是throw()

于 2013-08-02T20:53:40.280 回答