从构造函数中抛出异常的奇怪格式

时间:2012-11-11 17:56:06

标签: c++ exception constructor

我们的教授给了我们一个shell来制作一个程序。在其中他给了我们一个名为“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 shell,Maker.cpp:

#include Maker.h

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

int main()
{
    return 0;
}

我从未见过像这样的构造函数声明。为什么将“throw(CycleFoundException)”标记到构造函数的声明中?这有必要吗?

如果给出这种格式,我将如何抛出异常?我是否仍然会以其他方式执行此操作,即如果某个条件未满足则抛出异常(从构造函数体内)?谢谢。

1 个答案:

答案 0 :(得分:2)

这只是一种说明允许函数抛出什么类型异常的方法:

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

表示只允许Maker::Maker(int)抛出CycleFoundException个例外,而不是其他任何例外。这称为“异常规范”。

请注意,C ++标准已弃用此机制。它不应该再使用了。你可能应该告诉你的教授;-)他们总是有问题的:http://mu2e.fnal.gov/public/hep/computing/standards/C++FAQ.shtml#exceptionspec