C++ 标准库异常类

转自:http://blog.csdn.net/zhq651/article/details/8425579

exception

C++标准库异常类继承层次中的基类为exception,其定义在exception头文件中,它是C++标准库所有函数抛出异常的基类,exception的接口定义如下:

namespace std {
       class exception {
       public:
             exception() throw();   //不抛出任何异常
             exception(const exception& e) throw();
             exception& operator= (const exception& e) throw();
             virtual ~exception() throw();
             virtual const char* what() const throw(); //返回异常的描述信息
       };
}

除了exception类,C++还提供了一些派生类,用于报告程序不正常的情况,在这些预定义的类中反映的错误模型中,主要包含逻辑错误和运行时错误两大类。

逻辑错误:logic_error

逻辑错误主要包括 invalid_argument, out_of_range, length_error, domain_error。

当函数接收到无效的实参,会抛出invaild_argument异常;如果函数接收到超出期望范围的实参,会抛出out_of_range异常,等等。

namespace std {
         class logic_error: public exception {
         public:
               explicit logic_error(const string &what_arg);
         };

         class invalid_argument: public logic_error {
         public:
               explicit invalid_argument(const string &what_arg); //非法实参
	     };

         class out_of_range: public logic_error {
         public:
               explicit out_of_range(const string &what_arg); //成员越界
	     };

         class length_error: public logic_error {
         public:
               explicit length_error(const string &what_arg); //对象超长
	     };

         class domain_error: public logic_error {
         public:
               explicit domain_error(const string &what_arg); //领域错误
	     };
}

运行时错误:runtime_error

运行时错误由程序域之外的事件引发,只有在运行时才能检测,主要包括range_error, overflow_error, underflow_error。函数可以通过抛出range_error报告算术运算中的范围错误,通过抛出overflow_error报告溢出错误。

namespace std {
         class runtime_error: public exception {
         public:
               explicit runtime_error(const string &what_arg);
         };

         class range_error: public runtime_error {
         public:
               explicit range_error(const string &what_arg); //算术运算范围错误
         };

         class overflow_error: public runtime_error {
         public:
               explicit overflow_error(const string &what_arg); //上溢错误
         };

         class underflow_error: public runtime_error {
         public:
               explicit underflow_error(const string &what_arg); //下溢错误
         };
}

注:Domain and range errors are both used when dealing with mathematical functions.

C++内建的异常类

另外,在new头文件中定义了bad_alloc异常,exception也是bad_alloc的基类,用于报告new操作符不能正确分配内存的情形。当dynamic_cast失败时,程序会抛出bad_cast异常类,其也继承自exception类。

时间: 2024-10-27 12:16:50

C++ 标准库异常类的相关文章

实现C++标准库string类的简单版本

后续待更新. 1 #ifndef STRING_H 2 #define STRING_H 3 4 #include <cassert> 5 #include <utility> 6 #include <iostream> 7 8 namespace jz 9 { 10 11 /************************************************************************/ 12 /* 重新实现C风格字符串处理函数 */

C++--标准库 字符串类

一.C++标准库 C++标准库1.C++标准并不是C++语言的一部分2.C++标准库是由类库和函数库组成的集合3.C++标准库中定义的类和对象位于std命名空间中4.C++标准库的头文件都不带.h后缀5.C++标准库涵盖了C库的功能C++编译环境的组成C++标准库预定义了多数常用的数据结构代码示例 二.字符串类 Q:C语言存在的问题1.C语言不支持真正意义上的字符串2.C语言用字符数组和一组函数实现字符串操作3.C语言不支持自定义类型,因此无法获得字符串类型解决方法1.从C到C++的进化过程引入

C++入门学习——标准库 string 类的使用

在 C++ 中,为了方便处理字符串,引入了 string 类.string 类型支持长度可变的字符串. 使用 string 之前,必须包含相应的头文件,string 属于 std 命名域的,因此需要通过命名限定: #include <string> using std::string; //using namespace std; string对象的定义和初始化 使用示例如下: #include <iostream> #include <string> using st

C++学习笔记(7)标准库string类

一.初始化string对象: 直接初始化:string a("value"); 拷贝初始化:string a = "value"; 二.读写string对象 注:cin会忽略头尾空白处,保留空白符需要使用getline: empty函数判断是否为空,size函数计算字符串长度. 不能把多个字面值直接相加赋值给string对象,字符串字面值不是string对象. 三.范围for语句的使用 string str("some,string!!!");

C++ 异常机制分析(C++标准库定义了12种异常,很多大公司的C++编码规范也是明确禁止使用异常的,如google、Qt)

阅读目录 C++异常机制概述 throw 关键字 异常对象 catch 关键字 栈展开.RAII 异常机制与构造函数 异常机制与析构函数 noexcept修饰符与noexcept操作符 异常处理的性能分析 正文 回到顶部 C++异常机制概述 异常处理是C++的一项语言机制,用于在程序中处理异常事件.异常事件在C++中表示为异常对象.异常事件发生时,程序使用throw关键字抛出异常表达式,抛出点称为异常出现点,由操作系统为程序设置当前异常对象,然后执行程序的当前异常处理代码块,在包含了异常出现点的

把《c++ primer》读薄(3-3 标准库bitset类型)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. //开头 #include <bitset> using std::bitset; 问题1.标准库bitset类型(模版) 需要处理二进制位的时候,可以使用c++标准库提供的bitset类型,它也是类模版,类似vectro容器,唯一不同的是,bitset类型需要说明长度,使用常量表达式给出的整型字面值或者已经初始化的cosnt对象. bitset<32> bit;//从0到31位算的,bit的32位每位初始化为

【Python】类和对象、继承、使用文件、存储、异常、标准库(不懂)

当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)--这就是self的原理了. 2.__init__ __init__ 方法名别写错了! __init__ 用来定义变量的 self一定要写!! 默认带的参数!!不管你新建的函数中有没有定义参数!! 3.类和对象 (有疑问?!!__del__ 方法没有用到) !!!!!!!!!!缩进和注释很重要啊啊啊啊!!!!!!!!

python所有的标准异常类:

python所有的标准异常类: 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIteration 迭代器没有更多的值 GeneratorExit 生成器(generator)发生异常来通知退出 SystemExit Python 解释器请求退出 StandardError 所有的内建标准异常的基类 ArithmeticError 所有

C++标准库和标准模板库

C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标准头文件中定义. 在C++开发中,要尽可能地利用标准库完成.这样做的直接好处包括: (1)成本:已经作为标准提供,何苦再花费时间.人力重新开发呢: (2)质量:标准库的都是经过严格测试的,正确性有保证: (3)效率:关于人的效率已经体现在成本中了,关于代码的执行效率要相信实现标准库的大牛们的水平: (4)良好的编程风格:采用行业中普遍的做法进行开发. 一.C++标准库 C++标准库的内容分为10类, 分别是:C1.语