5

私は C++ にかなり慣れていないので、std::exception から拡張されたカスタム例外の次のコード スニペットを見つけました。私が理解していない唯一の部分は: err_msg(msg) {}、コンストラクター定義の後です。これが関数中括弧に含まれていない理由を誰かが説明できますか?

class my_exception : public std::exception {
  private:
    std::string err_msg;

  public:
    my_exception(const char *msg) : err_msg(msg) {};
    ~my_exception() throw() {};
    const char *what() const throw() { return this->err_msg.c_str(); };
};
4

1 に答える 1

4

メンバーerr_msgは、初期化子リストによって既に初期化されています。

my_exception(const char *msg) : err_msg(msg) {};
//                         here ^^^^^^^^^^^^

したがって、コンストラクターにとって何もする必要はありません。


サイドノート: std::string を exceptions で使用しないことについていくつかの議論があります。グーグルで検索するか、こちらを参照してください。

于 2013-07-16T15:55:37.360 に答える