一、程序的错误
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. 自定义xcode文件模板

    下面两个路径都可以用于放模板文件 1. /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File Template ...

  2. 用Nginx实现Session共享的均衡负载

    前言 大学三年多,也做个几个网站和APP后端,老是被人问到,如果用户多了服务器会不会挂,总是很尴尬的回答:“哈哈,我们的用户还少,到了服务器撑不住的时候,估计都上市了吧”.说是这么说,但是对于有强迫症 ...

  3. [置顶] js对象

    js中,一切事物都是对象.对象是一切的基础. 而具体到某一个对象时. 对象则是包含一组变量和函数的集合实例 我们先来中体会下je对象的全局. 接下来就具体揭开这个对象的面纱吧 ja对象分类 Funct ...

  4. oracle日期计算

    查询某月有多少天.代码例如以下: select to_number(add_months( trunc(to_date('2014-11-4 11:13:53','yyyy-mm-dd hh24:mi ...

  5. 线程异常:undefined reference to &#39;pthread_create&#39; 处理

    源代码: #include <stdio.h> #include <pthread.h> #include <sched.h> void *producter_f ...

  6. VCS仿真 Dump Memory

    VCS仿真 Dump Memory 两种方法 vcs联合verdi生成fsdb文件 vcs生成vpd文件 VCS联合verdi生成fsdb文件 1.testbench中加入如下语句: initial ...

  7. Javascript高级程序设计读书笔记(第三章)

    第3章 基本概念 3.4 数据类型 5种简单数据类型:undefined.boolean.number.null.string. typeof操作符,能返回下列某个字符串:“undefined”.“b ...

  8. android内存优化之图片压缩和缓存

    由于手机内存的限制和网络流量的费用现在,我们在加载图片的时候,必须要做好图片的压缩和缓存. 图片缓存机制一般有2种,软引用和内存缓存技术. 1.压缩图片:压缩图片要既不能模糊,也不能拉伸图片. 图片操 ...

  9. javascript 生成UUID

    代码一: /*! Math.uuid.js (v1.4) http://www.broofa.com mailto:robert@broofa.com Copyright (c) 2010 Rober ...

  10. c#使用Dictionary统计字符串中出现次数最多字符

    最近在找工作,遇到这样一道面试题: 对于给定的一个字符串,统计出该串中各个字符出现的次数,并打印出出现次数最多的那个字符 因为本人是个菜鸟,所以当时写的思路是用递归 /*str 字符串, strA 第 ...