C/C++进阶学习笔记(三) 异常处理 try catch throw

本节介绍C++里面的异常处理

欢迎到 我的博客 查看更详细的内容

throw

throw可以理解为人为地抛出自定义的异常类型,可以用于代码中符合某些条件时刻意地制造一些异常信息抛出给控制台处理,比如如下例子:

Sales_item item1,item2;
if(!item1.same_isbn(item2))     //当item1和item2的ISBN不同时,抛出异常
    throw runtime_error("Data must refer to same ISBN");
cout << item1 + item2 << endl;

try catch结构

try catch结构用于捕捉程序中会出现的异常,并对异常进行处理

try一下某句代码会不会有异常,如果有的话catch某种类型的异常,并进行处理

try{
    可能出现异常的语句;
}
catch(异常种类1 异常变量名1){
    处理第一种异常的语句;
}
catch(异常种类2 异常变量名2){
    处理第二种异常的语句;
}

常见的异常种类

异常名解释
exception最常见的问题
runtime_error运行时的错误,只有在运行时才能检测到
range_error运行时的错误,生成的结果超出了可接受的值域
overflow_error运行时的错误,计算上溢
underflow_error运行时的错误,计算下溢
logic_error逻辑错误,可在运行前检测到
domain_error逻辑错误,参数的结果值不存在
invalid_argument逻辑错误,不合适的参数
length_error逻辑错误,试图生成一个超出该类型最大长度的对象
out_of_range逻辑错误,使用一个超出有效范围的值

实例

// try_catch_throw.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <bitset>

using namespace std;

int main()
{
    bitset<100> bs; //定义bitset,可以理解为位数组

    for (size_t index = 0; index != bs.size(); ++index) //用size_t访问数组位,可以动态地自我改变index的类型,避免访问不到数组的高位元素
        bs[index] = index;

    //bs.to_ulong();

    try
    {
        bs.to_ulong();      //bs的长度(100)大于ulong能存储的位数,此处会出现溢出异常
    }
    catch (runtime_error err)   //catch runtime error
    {
        cout << err.what() << endl;
    }

    try
    {
    //throw logic_error("just kidding");
    throw overflow_error("just kidding");       //这里人为地抛出异常供后面的语句来catch
    }
    catch (overflow_error err)
    {
        cout << "overflow error" << endl << err.what() << endl;
    }
    catch (logic_error err)
    {
        cout << "logic error" << endl << err.what() << endl;
    }

    system("pause");

    return 0;
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值