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."<


发布评论