`
grantren
  • 浏览: 76478 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

对C++异常一些深入的讨论

阅读更多

异常

1. goto, break, return, continue和异常
 在try块内部, goto, break, return, continue 可以用来转移程序流程, 当这种情况发生时, 在try块内声明的所有变量都会被释放掉.

cpp 代码
  1. lab: try {   
  2.     T1 t1;   
  3.     try {   
  4.         T2 t2;   
  5.         if(condition) goto lab;   
  6.     } catch(...) {   
  7.         // handler2   
  8.     }   
  9. catch(...) {   
  10.     // handler1   
  11. }   

 
 在上面的例子中,当goto语句执行时,会先销毁t2,然后是t1. 这里假定condition语句没有声明变量. 如果在销毁t2时产生了exception, 那么程序的流程会转移到handler2. 如果在销毁t1时产生了exception, 那么程序的流程会转移到handler1.
 
2. 对于构造函数成员初始化表列,如果产生了异常,有专门的语法去处理:

cpp 代码
  1. int f(int);    
  2. class C {       
  3.     int i;       
  4.     double d;       
  5. public:       
  6.     C(intdouble);       
  7. };       
  8.       
  9. C::C(int ii, double id)        
  10. try : i(f(ii)), d(id) {       
  11.     // constructor function body       
  12. }       
  13. catch(...) {       
  14.     // handles exceptions thrown from the ctor-initializer       
  15.     // and from the constructor function body       
  16. }  

 3. 如果一个类的虚函数声明了异常规格,那么所有子类声明这个虚函数的异常规格必须包含在父类所允许的异常范围内,看下面的例子:

cpp 代码
  1. struct Base {   
  2.     virtual void f() throw (intdouble);   
  3.     virtual void g();   
  4. };   
  5.   
  6. struct Derived : Base {   
  7.     void f();               // ill-formed   
  8.     void g() throw(int);    // OK   
  9. };   

 

解释一下,f是一个虚函数,声明位于父类,是一个接口。最初的异常声明规格为throw (int, double),在Derived类中重写了虚拟表,f 当前的异常声明为则允许所有异常,这样扩大了原来允许的异常范围,所以发生了错误。
分享到:
评论

相关推荐

    C和C++代码精粹 C和C++代码精粹

    《C和C++代码精粹》基于作者备受好评的C/C++ User Journal...《C和C++代码精粹》可以帮助有一定经验的C和C++程序员深入学习这两种密切相关的语言,对书中代码的参悟和应用,可以帮助他们从根本上提高使用程序的效率。

    c和c++代码精粹 C & C++ Code Capsules

    本书基于作者备受好评的C/C++ User Journal杂志上的每月专栏,通过大量完全...本书可以帮助有一定经验的C和C++程序员深入学习这两种密切相关的语言,对书中代码的参悟和应用,可以帮助他们从根本上提高使用程序的效率。

    C和C++代码精粹

    , 《C和C++代码精粹》分为3篇共20章,分别从指针、预处理器、C标准库、抽象、模板、异常、算法、容器、文件处理、动态内存管理等不同层次的话题展开讨论。书中的精粹代码,对于C和C++程序员具有很好的使用价值和启发...

    开学了,有路网团购太便宜啦! C++编程惯用法(高级程序员常用方法和技巧)/深入C++系列(C++ Strategies and Tactics)

    接下来本书对单继承和多重继承进行了深入的探索。一开始书中会给出一个关于它们应该用在设计的什么地方的讨论,然后就是一些详细的示例代码,用来向我们演示如何在实践中使用这些概念。对于 mulu 代译者序 序 第0章 ...

    exceptional c++:47个c++工程难题、编程问题和解决方案(英文版)

    本书列出的条款涵盖了许多方面的主题,尤其对异常安全性、类和模块的合理设计,正确的代码优化,以及编写符合c++标准的可移植代码进行了深入的讨论。  《exceptional c++:47个c++工程难题、编程问题和解决方案...

    Exceptional C++ 英文版 文字版 PDF格式 无水印 完整版 Herb Sutter

    Exceptional C++ 英文版 ...此书列出的条款涵盖了许多方面的主题,尤其对异常安全性、类和模块的合理设计,正确的代码优化,以及编写符合C++标准的可移植代码进行了深入的讨论。还适于有一定C++编程基础的读者阅读。

    C和C++代码精粹 - Bruce_Eckel - 人民邮电出版社

     《C和C++代码精粹》分为3篇共20章,分别从指针、预处理器、C标准库、抽象、模板、异常、算法、容器、文件处理、动态内存管理等不同层次的话题展开讨论。书中的精粹代码,对于C和C++程序员具有很好的使用价值和启发...

    C++编程惯用法+高级程序员常用方法和技巧!

    在国际象棋中,学会如何移动棋子只能算是入门:要想掌控整个...在本书的最后,我们还可以学到如何将一个项目从C移植到C++之上,书中对该过程的讨论不但包括了其中可能出现的技术问题,也包括了使用技术的“人”的问题。

    C++入门到精通

    并说明了如何定义和处理我们自己的异常类层次结构 这一章也深入讨论了在继承机制下重 载函数的解析过程 第 20 章详细说明了如何使用 C++的iostream输入/输出库 它通过例子说明了一般的数 据输入和输出 说明了...

    C++编程思想.第2卷

    C++编程思想》不仅系统而详细地探讨了何时和如何使用内联、引用、运算符重载、继承和动态对象等方面的重要问题,而且还讨论了一些深入的技术,如怎样正确使用模板、异常及多重继承等。Eckel本人的面向对象和程序设计...

    C和C++代码精粹 电子版

    本书基于作者备受好评的C/C++ User Journal杂志上的每月专栏,通过大量... 本书可以帮助有一定经验的C和C++程序员深入学习这两种密切相关的语言,对书中代码的参悟和应用,可以帮助他们从根本上提高使用程序的效率。

    C++程序设计原理与实践(中文带附录高清版).7z.004(共9个分卷)

    此外,本书通过对C++思想和历史的讨论、对经典实例(如矩阵运算、文本处理、测试以及嵌入式系统程序设计)的展示,以及对C语言的简单描述,为你呈现了一幅程序设计的全景图。  ·C++初学者的权威指南。无论你是从事...

    C++程序设计原理与实践(中文带附录高清版).7z.009(共9个分卷)

    此外,本书通过对C++思想和历史的讨论、对经典实例(如矩阵运算、文本处理、测试以及嵌入式系统程序设计)的展示,以及对C语言的简单描述,为你呈现了一幅程序设计的全景图。  ·C++初学者的权威指南。无论你是从事...

    C++程序设计原理与实践(中文带附录高清版).7z.005(共9个分卷)

    此外,本书通过对C++思想和历史的讨论、对经典实例(如矩阵运算、文本处理、测试以及嵌入式系统程序设计)的展示,以及对C语言的简单描述,为你呈现了一幅程序设计的全景图。  ·C++初学者的权威指南。无论你是从事...

    C和C++代码精粹(中文版)

    本书基于作者备受好评的C/C++ User Journal杂志上的每月专栏,通过大量完全...本书可以帮助有一定经验的C和C++程序员深入学习这两种密切相关的语言,对书中代码的参悟和应用,可以帮助他们从根本上提高使用程序的效率。

    C++程序设计原理与实践(中文带附录高清版).7z.001(共9个分卷)

    此外,本书通过对C++思想和历史的讨论、对经典实例(如矩阵运算、文本处理、测试以及嵌入式系统程序设计)的展示,以及对C语言的简单描述,为你呈现了一幅程序设计的全景图。  ·C++初学者的权威指南。无论你是从事...

    新手学习C++入门资料

    C++中的try/catch/throw异常处理机制取代了标准C中的setjmp()和longjmp()函数。 二、关键字和变量 C++相对与C增加了一些关键字,如下: typename bool dynamic_cast mutable namespace static_cast using ...

    C++程序设计原理与实践(中文带附录高清版).7z.002(共9个分卷)

    此外,本书通过对C++思想和历史的讨论、对经典实例(如矩阵运算、文本处理、测试以及嵌入式系统程序设计)的展示,以及对C语言的简单描述,为你呈现了一幅程序设计的全景图。  ·C++初学者的权威指南。无论你是从事...

    C++程序设计原理与实践(中文带附录高清版).7z.006(共9个分卷)

    此外,本书通过对C++思想和历史的讨论、对经典实例(如矩阵运算、文本处理、测试以及嵌入式系统程序设计)的展示,以及对C语言的简单描述,为你呈现了一幅程序设计的全景图。  ·C++初学者的权威指南。无论你是从事...

Global site tag (gtag.js) - Google Analytics