找回密码
 立即注册

微信登录,快人一步

QQ登录

只需一步,快速开始

搜索
查看: 1535|回复: 0

C++ 异常处理《Rice C++ 学习开发》

[复制链接]
发表于 2019-8-15 22:43:24 | 显示全部楼层 |阅读模式
点击蓝字

关注我们

简单的说,异常就是代码出现不正常,有了神经病。哈哈哈哈。。。。。。就像单片机代码中,出现异常代码跑飞了,看门狗没喂狗,产生复位。

异常是程序执行过程期间产生的问题,比如当除数为0时的操作,这是一个有问题的操作。在C语言中,这个有问题的操作是通过条件判断来审判这个骚操作是否真确。而面向对象语言通过异常方式来实现转义程序控制权。

C++异常提供了三个关键字:

throw:当程序出现异常时,将异常抛出。

catch:捕获程序的异常。

try:try 块中的代码标识将被激活的特定异常,通常跟着一个或多个catch 块。

异常捕获:

当程序抛出异常时,使用try和catch捕获异常。try块中放置可能出现异常的代码,其代码也称为保护代码,catch块中放置捕获带异常后的处理方法。
try{// 保护代码}catch( ExceptionName e1 ){// catch 块}catch( ExceptionName eN ){// catch 块}
异常抛出:

C++提供关键字throw,它可以在任意位置抛出异常,其中throw的操作数可以使任意的表达式,表达式的类型,决定抛出异常的类型。
cin >> a;cin >> b;if(b == 0){throw"error";}else{  c = a/b;}
try、catch、throw三个关键字的使用方法,例子:
#include<iostream>usingnamespacestd;doubledivision(int a, int b){if( b == 0 )   {throw"Division by zero condition!";   }return (a/b);}intmain(){int x = 50;int y = 0;double z = 0;try {    z = division(x, y);cout << z << endl;  }catch (constchar* msg)  {cerr << msg << endl;  }return0;}
C++提供了一系列标准的异常,需包含头文件#include <exception>

异常

描述

std::exception

该异常是所有标准 C++ 异常的父类。

std::bad_alloc

该异常可以通过 new 抛出。

std::bad_cast

该异常可以通过 dynamic_cast 抛出。

std::bad_exception

这在处理 C++ 程序中无法预期的异常时非常有用。

std::bad_typeid

该异常可以通过 typeid 抛出。

std::logic_error

理论上可以通过读取代码来检测到的异常。

std::domain_error

当使用了一个无效的数学域时,会抛出该异常。

std::invalid_argument

当使用了无效的参数时,会抛出该异常。

std::length_error

当创建了太长的 std::string 时,会抛出该异常。

std::out_of_range

该异常可以通过方法抛出,例如 std::vector 和 std::bitset<>::operator[]()。

std::runtime_error

理论上不可以通过读取代码来检测到的异常。

std::overflow_error

当发生数学上溢时,会抛出该异常。

std::range_error

当尝试存储超出范围的值时,会抛出该异常。

std::underflow_error

当发生数学下溢时,会抛出该异常。

C++允许通过继承和重载 exception 类来定义自己的异常处理。例子:
#include<iostream>#include<exception>usingnamespacestd;structuser_exc :public exception{constchar * what()constthrow(){return"User Exception";  }};intmain(){try  {throw user_exc();  }catch(user_exc& e)  {cout << "User Exception caught" << endl;cout << e.what() << endl;  }}
w1.jpg

《LOTO示波器体验》

如果你对这款示波器感兴趣

想咨询价格、产品功能

私聊作者(wueroo1314)或者后台留言



w2.jpg

w3.jpg

《往期文章》

-> 饭仔的大学经历

-> C# 串口上位机开发

-> Qt 串口上位机开发

->RT-Thread 如何移植RTT到stm32

w4.jpg

w5.jpg

我将持续更新文章和学习资料

可加作者的微信一起交流学习



---微信号:wueroo1314---

添加公众号获取交流群二维码和开源资料

w7.jpg

饭仔DIY

微信号 : Rice_DIY

技术 | 开源 | 分享

长按关注。。。

w8.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

回手机版|论坛帮助|易德轩网 ( 苏ICP备2022008325号-4 )

GMT+8, 2024-12-26 02:22

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表