anrey573 发表于 2019-8-15 22:43:24

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

点击蓝字

关注我们

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

异常是程序执行过程期间产生的问题,比如当除数为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;}}


《LOTO示波器体验》

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

想咨询价格、产品功能

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

http://static.video.qq.com/TPout.swf?vid=wxv_917588984535089153&1314.swf





《往期文章》

-> 饭仔的大学经历

-> C# 串口上位机开发

-> Qt 串口上位机开发

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





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

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



---微信号:wueroo1314---

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



饭仔DIY

微信号 : Rice_DIY

技术 | 开源 | 分享

长按关注。。。

页: [1]
查看完整版本: C++ 异常处理《Rice C++ 学习开发》