一、程序的错误
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的更多相关文章

  1. iOS系列 基础篇 08 文本与键盘

    iOS系列 基础篇 08 文本与键盘 目录: 1. 扯扯犊子 2. TextField 3. TextView 4. 键盘的打开和关闭 5. 打开/关闭键盘的通知 6. 键盘的种类 7. 最后再扯两句 ...

  2. javaEE基础08

    javaEE基础08 一.继承 特点:继承父类的属性和方法,单继承(多继承) 特性:方法的复写(重写) 比如:人可以养狗 人------>狗:整体和部分(拥有)关系 关键字:extends 结构 ...

  3. 【玩转单片机系列001】 08接口双色LED显示屏驱动方式探索

    前些日子,从淘宝上购得一块08接口的双色LED显示屏(打算做个音乐频谱显示器),捣鼓了好几天,终于搞清楚了其控制原理,在这里做个总结,算是备忘吧. 1.LED显示屏的扫描方式 LED显示屏的扫描方式有 ...

  4. 《HelloGitHub月刊》第08期

    <HelloGitHub>第08期 兴趣是最好的老师,<HelloGitHub>就是帮你找到兴趣! 简介 最开始我只是想把自己在浏览GitHub过程中,发现的有意思.高质量.容 ...

  5. Spring Security(08)——intercept-url配置

    http://elim.iteye.com/blog/2161056 Spring Security(08)--intercept-url配置 博客分类: spring Security Spring ...

  6. [DFNews] EnCase v7.08发布

    EnCase v7.08 近日正式发布,7.08增加了Evidence Processor Manager以及Evidence Processor,不仅可以在本地实现证据处理队列,也支持了通过网络进行 ...

  7. 【博客美化】08.添加"扩大/缩小浏览区域大小" 按钮

    博客园美化相关文章目录: [博客美化]01.推荐和反对炫酷样式 [博客美化]02.公告栏显示个性化时间 [博客美化]03.分享按钮 [博客美化]04.自定义地址栏logo [博客美化]05.添加Git ...

  8. JavaScript学习08 Cookie对象

    JavaScript学习08 Cookie对象 JavaScript Cookie Cookie对象: Cookie是一种以文件的形式保存在客户端硬盘的Cookies文件夹中的用户数据信息(Cooki ...

  9. AC日记——石头剪刀布 openjudge 1.6 08

    08:石头剪刀布 总时间限制:  1000ms 内存限制:  65536kB 描述 石头剪刀布是常见的猜拳游戏.石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负. 一天,小A和小B正好在 ...

  10. AC日记——字符替换 openjudge 1.7 08

    08:字符替换 总时间限制:  1000ms 内存限制:  65536kB 描述 把一个字符串中特定的字符全部用给定的字符替换,得到一个新的字符串. 输入 只有一行,由一个字符串和两个字符组成,中间用 ...

随机推荐

  1. CSDN第四届在线编程大赛2014初赛:带通配符的数

    题目要求: 输入参数:参数A,含有任意个数的?的数值字符串,如:12?4,?代表一位任意数             参数B,不含?的数值字符串,长度与参数A一致输出结果:参数A比参数B大的可能数值个数 ...

  2. 新闻:型牌男装:网上订服装,如何将返修率降到5个点以下 | IT桔子

    新闻:型牌男装:网上订服装,如何将返修率降到5个点以下 | IT桔子 型牌男装:网上订服装,如何将返修率降到5个点以下

  3. JVM运行时内存结构

    原文转载自:http://my.oschina.net/sunchp/blog/369707 1.JVM内存模型 JVM运行时内存=共享内存区+线程内存区 1).共享内存区 共享内存区=持久带+堆 持 ...

  4. windows 杀进程

    selenium自动化时,会启动chromedriver.exe,每次运行一次,就多启动一个,执行多次就会拖慢系统.如下批处理命令,可以批量杀掉进程 tasklist |find "chro ...

  5. python3-day4(re正则表达式,冒泡)

    一.正则表达式常用 1.re.match:只尝试从字符串的查找,后面不作查找. 例子: import re text="aabcdefg123123" m=re.match('a' ...

  6. linux文件权限解说

    我们进入一个目录, 执行ls -l会显示该目录下所有档案(这里用"档案"这个词, 代表文件和文件夹)的详细信息. 如图: 一共有7列信息, 分别为: [权限], [连结数], [拥 ...

  7. MongoDB 操作手冊CRUD插入

    插入操作 插入记录 1.插入一条记录 db.testData.insert({num:1,name:'a'}); 结果 WriteResult({ "nInserted" : 1 ...

  8. linux性能优化常用命令

    作为一名linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行,但是由于硬件问题.软件问题.网络环境等的复杂性 和多变性,导致对系统的优化变得异常复杂,如何定位性能问题出在哪 ...

  9. oracle 格式化数字 to_char

    转:http://blog.csdn.net/chinarenzhou/article/details/5748965 Postgres 格式化函数提供一套有效的工具用于把各种数据类型(日期/时间,i ...

  10. Android中自定义ActionBar的背景色等样式style

    Android中想要去自定义ActionBar的背景色等样式. [折腾过程] 1.自己找代码,发现对应的配置的地方了: AndroidManifest.xml ? 1 2 <applicatio ...