奇怪的格式用于从构造函数中抛出异常
Strange format for throwing exception from a constructor
我们的教授给了我们一个制作程序的外壳。在其中,他给了我们一个名为" 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
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- 为什么这个向量构造函数抛出 std::bad_alloc异常?
- 无条件地从构造函数抛出*this
- 如果RAII构造函数抛出呢
- 跨dll边界向构造函数抛出异常
- 是否可以对构造函数抛出异常的对象进行异常处理,该对象的异常处理接近其基于堆栈的代码创建
- 如果从 QObject 派生的类的构造函数抛出,则将发出 destroy()
- 当构造函数抛出时,数组不会在此处释放,对吧?
- 捕获构造函数抛出的异常似乎是不可能的
- 如果构造函数抛出异常,如何删除对象
- std::regex构造函数抛出异常
- 当构造函数抛出异常时,如何删除数据成员的内存
- 我相信这是clang中的一个错误,它与构造函数抛出的placement新表达式有关
- 如果 Foo 的构造函数抛出,'Foo *p = new Foo()' 中 p 的值是多少?
- 从静态[非动态]对象的c++构造函数抛出异常
- 如果构造函数抛出异常会发生什么
- 为什么不能从析构函数抛出异常,但可以从复制构造函数抛出异常
- 从构造函数抛出异常
- 如果构造函数抛出异常,那么拥有该类的全局对象是否有意义?
- C++向量构造函数抛出std::out_of_range异常(Microsoft C++stdlib)