今気づいたこと。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 に配置することを選択しました。
実際には標準で要求されるインターフェースも提供しているため、これは準拠した拡張機能と見なすことができます。標準に準拠したプログラムは期待どおりに動作します。
他の実装ではこのようには行われないため、移植可能なプログラムでは追加のコンストラクターを使用しないでください。