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

标签 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)”标记到构造函数的声明中?有必要吗?

对于这种格式,我该如何抛出异常?我是否仍会以与其他方式相同的方式来做,也就是如果不满足特定条件则抛出异常(从构造函数的主体内)?谢谢。

最佳答案

这只是说明允许函数抛出哪种异常的一种方式:

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

意味着 Maker::Maker(int) 只允许抛出 CycleFoundException 异常,没有别的。这称为“异常规范”。

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

关于c++ - 从构造函数中抛出异常的奇怪格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13333800/

相关文章:

c++ - ICMP 回显请求/回复无法到达目的地的正确过程是什么?

c# - 无法创建简单类

c++ - 从重载的复制构造函数中调用默认复制构造函数

c++ - 使用堆的优先级队列

c++ - 位和字节填充

jsp - 当属性无效时,我可以在自定义 JSP 标记中使用 JSTL 抛出异常吗?

python - 回溯 header : "most recent call last" vs "innermost last"

c++ - 为什么显式允许默认构造函数和具有 2 个或更多(非默认)参数的构造函数?

c++ - 从派生类的 friend 那里使用基类的 protected 静态函数

java - 如何从间接线程中捕获异常?