VC++ で std::exception に追加のコンストラクタがあるのはなぜですか? 質問する

VC++ で std::exception に追加のコンストラクタがあるのはなぜですか? 質問する

今気づいたこと。inのexception定義標準(18.6.1):

class exception {
public :
    exception() throw();
    exception(const exception &) throw();
    exception& operator=(const exception&) throw();
    virtual ~exception() throw();
    virtual const char* what() const throw();
};

exceptionの定義マイクロソフト:

class exception {
public:
   exception(); 
   exception(const char *const&);
   exception(const char *const&, int);
   exception(const exception&); 
   exception& operator=(const exception&); 
   virtual ~exception();
   virtual const char *what() const;
};

Microsoft のバージョンではオブジェクトのエラー メッセージを指定できるようですが、標準バージョンでは派生クラスに対してのみ指定できます (ただし、未定義のメッセージを持つexceptionジェネリックを作成することは禁止されていません)。exception

これはかなり取るに足らないことだとわかっていますが、それでも。これには何か理由があるのでしょうか?

ベストアンサー1

特に理由はありません。MS 実装では、文字列処理を、そこから派生した各クラス (<stdexcept>) ではなく、std::exception に配置することを選択しました。

実際には標準で要求されるインターフェースも提供しているため、これは準拠した拡張機能と見なすことができます。標準に準拠したプログラムは期待どおりに動作します。

他の実装ではこのようには行われないため、移植可能なプログラムでは追加のコンストラクターを使用しないでください。

おすすめ記事