摘要:
一、先讨论异常被引发后,可能导致的问题 意外异常: 如果它是在带异常规范的函数中引发的,则必须与规范列表中的某种异常匹配,否则为意外异常。在默认情况下,这将导致程序异常终止(虽然C++11摒弃了异常规范,但仍支持它,且有些现有的代码使用了它)。 未捕获异常: 如果异常不是在函数中引发的,则必须捕获它 阅读全文
posted @ 2019-02-26 09:01
Grooovvve
阅读(385)
评论(0)
推荐(0)
摘要:
异常、类和继承以三种方式相互关联。 首先,可以像标准C++库所做的那样,从一个异常类派生出另一个。 其次,可以在类定义中嵌套异常类声明来组合异常。 第三,这种嵌套声明本身可以被继承,还可以作为基类。 接下来用一个例子进行相关的探索; 以下这个头文件声明了一个Sales类,它用于存储一个年份以及一个包 阅读全文
posted @ 2019-02-26 09:00
Grooovvve
阅读(212)
评论(0)
推荐(0)
摘要:
C++异常的主要目的是为了设计容错程序提供语言级支持。 即异常使得在程序设计中包含错误处理功能更加容易,以免事后采取一些严格的错误处理方式。 异常的灵活性和相对方便性激励着程序员在条件允许的情况下在程序设计中加入错误处理功能。 总之,异常是这样一种特性,类似于类,可以改变你的编程方式。 较新的C++ 阅读全文
posted @ 2019-02-26 08:59
Grooovvve
阅读(487)
评论(0)
推荐(0)
摘要:
虽然throw-catch机制类似于函数参数和函数返回机制,但是还是有些不同之处。 其中之一是函数fun()中的返回语句将控制权返回到调用fun()的函数A中, 但throw语句将控制权向上返回到第一个这样的函数:包含能够捕获相应异常的try-catch组合。 另一个不同之处是,引发异常时,编译器总 阅读全文
posted @ 2019-02-26 08:58
Grooovvve
阅读(192)
评论(0)
推荐(0)
摘要:
异常规范 异常规范的理念看似有前途,但实际的使用效果并不好。 忽视异常规范之前,您至少应该知道它是什么样的,如下所示: double harm(double a) throw(bad_thing); //may throw bad_thing exception double harm(double 阅读全文
posted @ 2019-02-26 08:57
Grooovvve
阅读(745)
评论(0)
推荐(0)
摘要:
通常,引发异常的函数将传递一个对象。这样做的重要优点之一就是,可以利用不同的异常类型来区分不同的函数在不同的情况下引发的异常。 对象可以携带信息,程序员可以根据这些信息来确定异常的原因。 同时,catch块可以根据这些信息来决定采取什么样的措施。 下面是针对函数引发的异常而提供的一种设计: 可以将b 阅读全文
posted @ 2019-02-26 08:56
Grooovvve
阅读(252)
评论(0)
推荐(0)
摘要:
下面介绍如何使用异常机制来处理错误。 C++异常是对程序运行过程中发生的异常情况的一种响应。 异常提供了将控制权从程序的一部分传递到另一部分的途径。 对异常的处理有3个组成部分: 1)引发异常 throw 2)使用处理程序捕获异常 catch 3)使用try块。 try 程序在出现问题时将引发异常, 阅读全文
posted @ 2019-02-26 08:55
Grooovvve
阅读(324)
评论(0)
推荐(0)
摘要:
一种比异常终止更灵活的办法是,使用函数的返回值来指出问题。 例如,ostream类的get(void)成员通常返回下一个输入字符的ASCII码,但到达文件尾时,将返回EOF。 对hmean()来说,这种方法不管用。任何数值都是有效的返回值,因此不存在可以指出问题的特殊值。 在这种情况下,可以使用指针 阅读全文
posted @ 2019-02-26 08:54
Grooovvve
阅读(982)
评论(0)
推荐(0)
摘要:
异常是相对较新的C++功能,有些老式编译器可能没有实现。另外有些编译器可能默认关闭这一特性,需要使用编译器选项来打开它。 这里先讨论一个基本问题: 2.0 * x * y / (x+y) 如果y是x的负值,则上述公式将导致被零除。这是一种不允许的运算。很多新式编译器通过生产一个表示无穷大的特殊浮点值 阅读全文
posted @ 2019-02-26 08:53
Grooovvve
阅读(960)
评论(0)
推荐(0)

浙公网安备 33010602011771号