800-C++ throw(抛出异常)详解

本文深入探讨了C++中的异常处理机制,包括throw用于抛出异常,try用于检测异常,catch用于捕获异常。通过一个动态数组的实现示例展示了异常在实际编程中的应用,以及自定义异常类型和异常规范的使用。同时,文章讨论了异常规范在不同编译器下的行为差异,并指出在C++11中已不推荐使用异常规范。

C++ throw(抛出异常)详解

抛出(Throw)--> 检测(Try) --> 捕获(Catch)

异常必须显式地抛出,才能被检测和捕获到;如果没有显式的抛出,即使有异常也检测不到。

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

throw exceptionData;

exceptionData 是“异常数据”的意思,它可以包含任意的信息,完全有程序员决定。exceptionData 可以是 int、float、bool 等基本类型,也可以是指针、数组、字符串、结构体、类等聚合类型,请看下面的例子:

char str[] = "hello world 666";
char *pstr = str;
class Base{
   
   };
Base obj;
throw 100;//int 类型
throw str;//数组类型
throw pstr;//指针类型
throw obj;//对象类型

动态数组的例子

C/C++ 规定,数组一旦定义后,它的长度就不能改变了;换句话说,数组容量不能动态地增大或者减小。这样的数组称为静态数组(Static array)。静态数组有时候会给编码代码不便,我们可以通过自定义的 Array 类来实现动态数组(Dynamic array)。所谓动态数组,是指数组容量能够在使用的过程中随时增大或减小。

#include <iostream>
#include <cstdlib>

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." << endl;
    }
    else if (m_flag == 2) 
    {
   
   
        cout << "Error: out of range( array length " << m_len << ", access index " << m_index << " )" << endl;
    }
    else 
    {
   
   
        cout 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林林林ZEYU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值