1

私たちの教授は、プログラムを作成するためのシェルをくれました。その中に「Maker」と呼ばれるクラスがあり、例外をスローすることができます。彼が提供したコンストラクターの形式を考えると、エラーをスローしてキャッチする方法について混乱しています。

彼は、CycleFoundException.h という独自の特別な例外ヘッダー ファイルを提供してくれました。これは次のようになります。

#include <iostream>
#include <exception>

using namespace std;

class CycleFoundException: public exception {
  // Don't add code
};

Maker.h ヘッダー ファイルは次のとおりです。

#include "CycleFoundException.h"    

class Maker
{
 private:
  // insert instance variables

 public:
  Maker(int x) throw (CycleFoundException);
};

最後に、cpp シェル Maker.cpp:

#include Maker.h

Maker::Maker(int x) throw (CycleFoundException){
//add code here
}

int main()
{
    return 0;
}

このようなコンストラクター宣言は見たことがありません。「throw (CycleFoundException)」がコンストラクターの宣言にタグ付けされるのはなぜですか? それは必要ですか?

そして、この形式で例外をスローするにはどうすればよいでしょうか? それ以外の場合と同じように、つまり、特定の条件が満たされない場合は、(コンストラクターの本体内から) 例外をスローしますか? ありがとう。

4

1 に答える 1

2

これは単に、関数がスローできる例外の種類を示す方法です。

Maker::Maker(int x) throw (CycleFoundException)

例外のMaker::Maker(int)スローのみが許可され、それ以外は許可されないことを意味します。CycleFoundExceptionこれを「例外指定」と呼びます。

C++ 標準では、このメカニズムが推奨されていないことに注意してください。もう使用しないでください。あなたはおそらくそれについてあなたの教授に知らせるべきです;-) それらは常に問題でした: http://mu2e.fnal.gov/public/hep/computing/standards/C++FAQ.shtml#exceptionspec

于 2012-11-11T18:08:36.493 に答える