c++ 08
一、程序的错误
1.编码错误:编译阶段
2.设计错误:测试阶段
3.环境错误:使用阶段
4.应用错误:测试和使用阶段
二、错误处理机制
1.通过返回值处理错误
当一个函数在执行过程中发生了某种错误,通过函数的返回值告诉函数调用者。
malloc/fopen - 成功返回有效指针,失败返回NULL
返回无效值表示失败
返回0表示成功,返回-1表示失败
1)优点:简单、避免崩溃、局部对象有机会析构。
2)缺点:逐层检查返回值
A->B->C
2.通过远程跳转处理错误
1)优点:不需要逐层检查返回值,简化错误处理流程
2)缺点:局部对象没有机会析构,形成内存泄漏。
3.C++异常机制
三、异常语法
抛出异常:
throw 异常对象;
如:
throw -1;
throw 3.14;
throw "error";
class A { ... };
throw A ();
A a (...);
throw a;
捕获异常:
try {
可以引发异常的语句;
}
catch (异常类型1 异常对象) {
针对异常类型1的处理;
}
catch (异常类型2 异常对象) {
针对异常类型2的处理;
}
...
catch (...) {
针对其它异常类型的处理;
}
如:
try {
foo ();
bar ();
hum ();
}
catch (int ex) {
// ...
}
catch (double ex) {
}
catch (string& ex) {
}
catch (A& ex) {
}
catch (...) {
}
四、使用异常的注意事项
1.抛出基本类型的异常,通过异常对象的值区分不同错误。
2.抛出类类型的异常,通过异常对象的类型区分不同错误。
3.通过异常类型携带更多的诊断信息。
4.异常说明
1)在函数的定义和声明中可以加入异常说明子句,表示该函数可能抛出的异常类型。
2)如果函数抛出了其异常说明以外的异常,该异常无法在程序中捕获。
3)所有未被捕获的异常最终都会交由std::unexpected()函数处理,缺省情况下该函数会调用std::terminate()函数,而后者又会调用abort()函数终止进程。
4)一个函数如果没有异常说明,表示它可以抛出任何异常,如果有throw ()异常说明,表示它不抛出任何异常。
5)如果函数声明和定义分开,那么在其声明和定义部分必须使用完全相同的异常说明。
6)子类中对基类虚函数的覆盖版本不能说明比基类版本抛出更多的异常。
5.忽略异常、继续抛出原异常、继续抛出新异常
忽略异常:一个函数对于它所收到的异常可以不catch,该异常就会继续向其调用者抛出,直到被catch为止,如果所有的函数都不catch该异常,最终被系统捕获,终止进程。
继续抛出原异常:throw;
继续抛出新异常:在catch中throw新的异常对象
五、在构造函数中抛出异常
1.在构造函数中可以抛出异常,而且某些情况只能通过异常表示构造过程中出现的错误。
2.如果一个对象在构造过程中抛出了异常,那么这个对象将被不完整构造,而一个不完整构造的对象,其析构函数永远不会被执行。因此就需要在抛出异常之前手动地释放所有动态分配的资源,这些资源构造函数的回滚机制无法自动释放,或者使用智能指针。
六、在析构函数中最好不要抛出异常
try {
A a;
a.foo ();
}
catch (...) {
...
}
将可能引发的异常内部消化。
七、标准库异常
八、I/O流
1.C++的I/O流和标C的I/O流没有本质性的区别,仅仅做了类的封装。
2.C++的I/O流库
3.文本的格式化I/O:<</>>
4.文本的非格式化I/O:get/put
5.文件的随机访问
seekg/seekp
tellg/tellp
6.二进制I/O
read/write
7.格式控制
流函数:cout.precision (10);
流控制符:cout << setprecision (10);
参考书
初学者:C++ Primer Plus
进阶:C++ Primer
Effective C++
More Effective C++
深入研究:C++程序设计语言,Bjarne S...
深度探索C++对象模型
数据算法:算法:C语言实现(1-4)
STL:C++标准库
休闲:C++语言的设计与演化
C++语言的99个常见错误
c++ 08的更多相关文章
- iOS系列 基础篇 08 文本与键盘
iOS系列 基础篇 08 文本与键盘 目录: 1. 扯扯犊子 2. TextField 3. TextView 4. 键盘的打开和关闭 5. 打开/关闭键盘的通知 6. 键盘的种类 7. 最后再扯两句 ...
- javaEE基础08
javaEE基础08 一.继承 特点:继承父类的属性和方法,单继承(多继承) 特性:方法的复写(重写) 比如:人可以养狗 人------>狗:整体和部分(拥有)关系 关键字:extends 结构 ...
- 【玩转单片机系列001】 08接口双色LED显示屏驱动方式探索
前些日子,从淘宝上购得一块08接口的双色LED显示屏(打算做个音乐频谱显示器),捣鼓了好几天,终于搞清楚了其控制原理,在这里做个总结,算是备忘吧. 1.LED显示屏的扫描方式 LED显示屏的扫描方式有 ...
- 《HelloGitHub月刊》第08期
<HelloGitHub>第08期 兴趣是最好的老师,<HelloGitHub>就是帮你找到兴趣! 简介 最开始我只是想把自己在浏览GitHub过程中,发现的有意思.高质量.容 ...
- Spring Security(08)——intercept-url配置
http://elim.iteye.com/blog/2161056 Spring Security(08)--intercept-url配置 博客分类: spring Security Spring ...
- [DFNews] EnCase v7.08发布
EnCase v7.08 近日正式发布,7.08增加了Evidence Processor Manager以及Evidence Processor,不仅可以在本地实现证据处理队列,也支持了通过网络进行 ...
- 【博客美化】08.添加"扩大/缩小浏览区域大小" 按钮
博客园美化相关文章目录: [博客美化]01.推荐和反对炫酷样式 [博客美化]02.公告栏显示个性化时间 [博客美化]03.分享按钮 [博客美化]04.自定义地址栏logo [博客美化]05.添加Git ...
- JavaScript学习08 Cookie对象
JavaScript学习08 Cookie对象 JavaScript Cookie Cookie对象: Cookie是一种以文件的形式保存在客户端硬盘的Cookies文件夹中的用户数据信息(Cooki ...
- AC日记——石头剪刀布 openjudge 1.6 08
08:石头剪刀布 总时间限制: 1000ms 内存限制: 65536kB 描述 石头剪刀布是常见的猜拳游戏.石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负. 一天,小A和小B正好在 ...
- AC日记——字符替换 openjudge 1.7 08
08:字符替换 总时间限制: 1000ms 内存限制: 65536kB 描述 把一个字符串中特定的字符全部用给定的字符替换,得到一个新的字符串. 输入 只有一行,由一个字符串和两个字符组成,中间用 ...
随机推荐
- 如何从Linux系统中获取带宽、流量网络数据
引入 国外的云主机厂商,例如AWS提供的网络数据是以流量为单位的,例如下面的图片: 从上图来看,其取值方式为 每隔5分钟取值1次,(每次)每个点显示为1分钟内的流量字节数(Bytes) 带宽与流量 我 ...
- xm学习笔记
1关于静态网页的制作 html主要负责页面的结构+css页面的美观+js与用户的交互. 2html 有标签体的标签: <p></p> <span></spa ...
- <php>文件操作*(重要)
//touch("./3.txt");//创建文件:在当前目录下创建3.txt文件 //copy("./3.txt","./touxiang/5.ph ...
- OpenWrt sscanf问题之于MT7620N与AR9341
在MT7620N平台做好了wifidog的相关调试工作,除了eth驱动.wireless性能问题,其余的都能够基本正常. 依据实际须要要对已完毕的工作在AR9341平台上实现. 事实上也简单.基本功能 ...
- FileZilla简单介绍及运用
一.FileZilla简介 FileZilla是一款免费开源的FTP客户端软件,并且还提供了服务器版本.虽然它是免费软件,可性能却一点也不含糊,比起那些共享软件来有过之而无不及,具备大多数的FTP软件 ...
- linux提取指定行至指定位置
grep查找ERROR,定位位置 awk打印到指定行数 sed打印到文本末尾 awk打印到文本末尾 方法一 #!/bin/csh -f if(-f errorlog.rpt) then rm -rf ...
- Asp.Net Mvc5新特性
One ASP.NET:统一平台 BootStrap:免费Css响应式页面 路由标记属性:简单,控制器,操作,前缀,参数,URL ASP.NET WEB API 2:路由标记属性,Oauth2.0,O ...
- oracle得到拼音函数
CREATE OR REPLACE FUNCTION fgetpy (v_str VARCHAR2) RETURN VARCHAR2AS v_strlen INT; v_return ...
- .NET 笔试分享
最近一直在面试,每次面试前也不怎么准备,虽说碰到的题大部分都很简单的,但是在现场答题的时候由于自己紧张脑子就空了,一些题答的不是很好,所以只有每次回来的时候才能好好想想怎么答: 题大部分还是挺简单的, ...
- UI基础视图----UILabel总结
UILabel是UIKit框架中非常常用的视图类,是UIView的子类,是UIWindow,UIImageView等的兄弟类,因为继承自UIView,所以继承了UIView中的属性和方法,大部分都可以 ...