C++异常处理(一)----基本语法
- 实验环境 win7 下的vs2017,基本原则:throw抛出的数据类型,和cathc语句的数据类型要一致
- 异常的引发和异常的处理可以分布在不同函数中,所以c++的异常是跨栈的
- 异常是由“地地道道“的错误所引发
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include<string.h>
using namespace std; void testerror(int x,int y)
{ if (y==)
{
throw x;
}
cout << "计算结果:"<<x/y<< endl;
} void main()
{
try
{
testerror(,);
}
catch (int x)
{
cout << x << "不能被0整除" << endl;
}
catch (...)
{
cout << "无言的结局" << endl;
}
system("pause");
}
- 下面的例子揭示了throw语句的强大,无论多少层都会抛出错误
void testerror(int x,int y)
{ if (y==)
{
throw x;
}
cout << "计算结果:"<<x/y<< endl;
} void awrap()
{
testerror(, );
} void main()
{
//
try
{
awrap();
}
catch (int x)
{
cout << x << "不能被0整除" << endl;
}
catch (...)
{
cout << "无言的结局" << endl;
}
system("pause");
}
输出结果:
- 一个字符串比较的例子
void testerror(char * name)
{
cout << "his name is " << name << endl;
if (strcmp(name,"雨化田")==)
{
throw name;
}
cout << "原来是:" << name << "!快快进来享用广式炒面" << endl;
} int main()
{
//
char name[] = "雨化田";
char *hisname = name;
try
{
testerror(hisname);
}
catch (char *name)
{
cout << "妈爷子诶~这不是:" << name << endl;
}
catch (...)
{
cout << "无言的结局" << endl;
}
system("pause");
return ;
}
输出结果:
- 栈解旋(unwinding):当异常抛出为栈对象时,异常处理可以达到析构异常对象的效果
#include<iostream>
using namespace std; class mycoach
{
public:
friend void freeobj(mycoach &t);
mycoach(char *myname, int age,int months)
{
this->myname = myname;
this->age = age;
this->months = months;
}
~mycoach()
{
cout << "free of space" << endl;
}
private:
char *myname;
int age;
int months;
}; void freeobj(mycoach &t)
{
if (t.age < )
{
cout <<"精神可嘉~但还是年龄太小" <<endl;
throw t.age;
}
if (t.months <= )
{
cout << "精神可嘉~再练一段时间,加油" << endl;
throw t.months;
}
//throw t;
} void main()
{
char name[] = "章小军";
char *hisname = name;
mycoach mt(hisname,,);
try
{
freeobj(mt);
}
catch (int a)
{
cout << "少于规定训练时间(12个月)实际:"<<a <<"个月"<< endl;
}
catch (...)
{
cout << "无言的结局" << endl;
}
system("pause");
//return 0;
}
输出结果:
其中,按下任意键之后,执行了析构函数也就是所谓的”栈解旋“
C++异常处理(一)----基本语法的更多相关文章
- Python 第八篇:异常处理、Socket语法、SocketServer实现多并发、进程和线程、线程锁、GIL、Event、信号量、进程间通讯
本节内容: 异常处理.Socket语法.SocketServer实现多并发.进程和线程.线程锁.GIL.Event.信号量.进程间通讯.生产者消费者模型.队列Queue.multiprocess实例 ...
- try-catch-finally 规则( 异常处理语句的语法规则 )
1) 必须在 try 之后添加 catch 或 finally 块.try 块后可同时接 catch 和 finally 块,但至少有一个块. 2) 必须遵循块顺序:若代码同时使用 catch 和 ...
- Java提高篇——Java 异常处理
异常的概念 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error:如果你用Syst ...
- java异常处理机制
本文从Java异常最基本的概念.语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Spring的异常处理框 架,阐述了异常处理的基本原则.并且作者提出了自己处理一个大型应用系统 ...
- PL/SQL异常处理
As we all known,程序的错误一般分为两类:编译错误和运行时错误.其中运行时错误被称为异常.PL/SQL语句块中处理异常的部分即为异常处理部分.在异常处理部分,可以指定当特定异常发生时所采 ...
- Java之异常处理机制
来源:深入理解java异常处理机制 2.Java异常 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 ...
- [C#] CSharp 基本语法
CSharp Language Specification 一.基础 1.规范: 除常量外,所有变量用驼峰命名方式,其它用帕斯卡命名方式. 2.编译: 首先由csc.exe将cs文件编译成MSIL.当 ...
- java 中的异常处理
一. 异常的概念和Java异常体系结构 异常是程序运行过程中出现的错误.本文主要讲授的是Java语言的异常处理.Java语言的异常处理框架, 是Java语言健壮性的一个重要体现. Java把 ...
- ORACLE PL/SQL异常处理(Exception)学习笔记
1.PL/SQL错误类型 错误类型 报告者 处理方法 编译时错误 PL/SQL编译器 交互式地处理:编译器报告错误,你必须更正这些错误 运行时错误 PL/SQL运行时引擎 程序化地处理:异常由异常处理 ...
- 深入理解java的异常处理机制
JAVA异常的概念 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的 ...
随机推荐
- 小程序云函数,解决接口https问题
本实例只是简单记录http请求 1,云函数如下 // 云函数入口函数 exports.main = async (event, context) => { let req = await got ...
- Spring全家桶注解一览(精选)
废话 最近想整理一波Spring注解相关的文章,虽然写CURD就只涉及到那些常用的注解.但是笔者我也想去了解一下其他注解,丰富下自己的知识面(提升一下逼格!). 就想在网上搜了半天,好像大家的都差不多 ...
- 解决Jupyter notebook安装后不自动跳转网页的方法
在安装完Jupyter notebook后,有童鞋说出现了各种不友好的问题,鉴于此情况,个人先随手写出以下三种情况,并给出解决方法: 题外建议:请使用谷歌浏览器为默认浏览器 一.对于弹不出浏览器的解决 ...
- Go语言( 流程控制)
流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”. Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码.降低重复代码而生的结 ...
- gorm 实现 mysql for update 排他锁
关于 MySQL 的排他锁网上已经有很多资料进行了介绍,这里主要是记录一下 gorm 如果使用排他锁. 排他锁是需要对索引进行锁操作,同时需要在事务中才能生效.具体操作如下: 假设有如下数据库表结构: ...
- jquery 如何获取select 选中项的下一个选项的值
<select> <option value="1" selected="selected">a</option> < ...
- Logrotate滚动openresty日志
一.摘要 Linux服务器上我们用Logrotate来分割归档日志文件,结合crond我们可以指定每天在某个时间自动整理日志等文档.本文主要说明了Centos下Logrotate的使用和配置的方法. ...
- appium 环境准备
一.环境准备 1.相关依赖环境 当前的环境是Windows 10版本 64位系统(32位的自己想办法吧) 1.jdk1.6.0 (64位) --最好1.6以上版本 2 ...
- VS使用日常
一.快捷键 1.Ctrl R+E 选中变量快捷自动生成属性
- [winfrom]C#中使用SendMessage
在C#中,程序采用了的驱动采用了事件驱动而不是原来的消息驱动,虽然.net框架提供的事件已经十分丰富,但是在以前的系统中定义了丰富的消息对系统的编程提供了方便的实现方法,因此在C#中使用消息有时候还是 ...