一、程序的错误
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. MVC 控制器详解

    Controller: Controllers 文件夹包含负责处理用户输入和响应的控制器类. MVC 要求所有控制器的名称必须以 "Controller" 结尾. 控制器的职责: ...

  2. HDU 2025 查找最大元素

    查找最大元素 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  3. 大话分页(补充)——Threadlocal封装offSet和pageSize简化分页工具类

    经过前两篇文章(大话分页一.大话分页二)的介绍,我认为我想介绍的东西已经介绍完了,不过想精益求精的童鞋可以继续看本篇文章. 在第一篇文章中介绍了一个分页的工具类(具体请看大话分页一),从实现功能上来说 ...

  4. unity3d 学习笔记(一)

    操作:按下shit 点击坐标轴中心 切换透视图 动画烘焙的概念:相当于把原来的控制器动画或者IK(骨骼)动画所有塌陷为逐帧动画,导出的时候必须选这一项 着色器:从技术的角度来看,着色器是渲染器的一个部 ...

  5. MongoDB[mark]总忘记它们是干啥的

    MongoDB集群包括一定数量的mongod(分片存储数据).mongos(路由处理).config server(配置节点).clients(客户端).arbiter(仲裁节点:为了选举某个分片存储 ...

  6. [RxJS] Refactoring Composable Streams in RxJS, switchMap()

    Refactoring streams in RxJS is mostly moving pieces of smaller streams around. This lessons demonstr ...

  7. 用JS的for循环打印九九乘法表

    需要使用两个for循环嵌套,代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  8. SilverLight 页面后台方法XX.xaml.cs 创建JS,调用JS ,弹出提示框

    1.Invoke和InvokeSelf [c-sharp] view plaincopy public partial class CreateJSDemo : UserControl { publi ...

  9. iOS9TableView分割线默认不显示,只有滑动的时候才显示 解决办法

    只有iOS9和iPhone6 plus模拟器上TableView分割线不会显示,后来终于找到了原因: 由于iPhone6 plus的分辨率较高,开发的时候同常都使用command + 3 或者 com ...

  10. Jquery对选取到的元素显示指定的长度,对于的字符串用“...”显示

    $(function() { $(".video_name").each(function() { var s = $(this).text(); $()); }); }); fu ...