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

Strange format for throwing exception from a constructor

本文关键字:构造函数 抛出异常 用于 格式      更新时间:2023-10-16

我们的教授给了我们一个制作程序的外壳。在其中,他给了我们一个名为" 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;
}

我从未见过这样的构造函数声明。为什么在构造函数的声明上标记"抛出(CycleFoundException)"?这是必要的吗?

鉴于这种格式,我将如何提出例外?我仍然会以其他方式这样做,也就是如果未满足某个条件,请抛出异常(从构造函数的主体内)?谢谢。

这只是说出允许函数投掷哪种异常的一种方法:

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

表示Maker::Maker(int)仅允许抛出CycleFoundException例外,仅此而已。这称为"异常规范"。

请注意,C 标准已贬低了此机制。它不应再使用了。您可能应该将其告知您的教授;-)他们总是有问题的:http://mu2e.fnal.gov/public/hep/hep/computing/computing/computing/standards/c fefaq.shtml#exceptionspec