2024年3月26日发(作者:)

以下哪些项能使用throw抛出

在《c++异常处理》一节中,我们讲到了 c++ 异常处理的流

程,具体为:

抛出(throw)--> 检测(try) --> 捕获(catch)

异常必须显式抛出,以便被检测和捕获;如果没有显式抛出,

即使有异常也不会被检测到。

在 c++ 中,我们使用 throw 关键字来显式地抛出异常,它的

用法为:

throw exceptiondata;

exceptiondata 是“异常数据”的意思,它可以包含任意的信

息,完全有程序员决定。exceptiondata 可以是 int、

float、bool 等基本类型,也可以是指针、数组、字符串、结

构体、类等聚合类型,请看下面的例子:

char str[] = "";

char *pstr = str;

class base{};

base obj;

throw 100; //int 类型

throw str; //数组类型

throw pstr; //指针类型

throw obj; //对象类型

一个动态数组的例子

c/c++ 规定,数组一旦定义后,它的长度就不能改变了;换句

话说,数组容量不能动态地增大或者减小。这样的数组称为静

态数组(static array)。静态数组有时候会给编码代码不

便,我们可以通过自定义的 array 类来实现动态数组

(dynamic array)。所谓动态数组,是指数组容量能够在使

用的过程中随时增大或减小。

下面的代码有点长,但它是一个典型的使用异常场景。请耐

心看完。

#include

#include

using namespace std;

//自定义的异常类型

class outofrange{

public:

outofrange(): m_flag(1){ };

outofrange(int len, int index): m_len(len),

m_index(index), m_flag(2){ }

public:

void what() const; //获取具体的错误信息

private:

int m_flag; //不同的flag表示不同的错误

int m_len; //当前数组的长度

int m_index; //当前使用的数组下标

};

void outofrange::what() const {

if(m_flag == 1){

cout<<"error: empty array, no elements to

pop."<