关闭

C++标准异常

191人阅读 评论(0) 收藏 举报
分类:

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++还提供了一些类,用于报告程序不正常的情况,在这些预定义的类中反映的错误模型中,主要包含逻辑错误和运行时错误两大类。

逻辑错误主要包括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);

};

}

运行时错误由程序域之外的事件引发,只有在运行时才能检测,主要包括range_error, overflow_error, underflow_error。函数可以通过抛出range_eroor报告算术运算中的范围错误,通过抛出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);

};

}

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

0
0
查看评论

C++ 标准的异常

C++ 标准的异常
  • daoming1112
  • daoming1112
  • 2017-02-10 20:04
  • 595

标准C++库中的异常类

在标准C++库中提供了一个异常类的基类exception和它的多个派生类。用于报告C++标准库中的函数在执行期间遇到的不正常情况。分别介绍如下。 1. 头文件中定义了异常类exception和bad_exception,异常类exception是标准C++库中所有异常类的基类。 2. 头文件中定...
  • wangyin159
  • wangyin159
  • 2015-06-22 15:21
  • 637

[C++]详解异常处理(Exception Handling) 及标准库异常处理类

详解异常处理(Exception Handling) 及标准库异常处理类 异常处理,英文名为exceptional handling, 是代替日渐衰落的error code方法的新法,提供error code 所未能具体的优势。异常处理分离了接收和处理错误代码。这个功能理清了编程者的思绪,也帮助...
  • stary_yan
  • stary_yan
  • 2016-04-30 11:00
  • 986

C++异常与结构化异常SEH的比较

结构化异常处理SEH(全称Structured Exception Handling),是Windows操作系统所提供的对错误或异常的处理机制,是Windows操作系统的一个重要组成部分。 在windows系统中,我们在开发应用程序时应该使用结构化异常还是C++异常?
  • suxinpingtao51
  • suxinpingtao51
  • 2014-05-13 11:39
  • 1332

异常规范和c++11

《C++ Primer Plus》第六版 15.3.5 异常规范和C++11 有时候,一种理念看似有前途,但实际的使用效果并不好。一个?这样的例子是异常规范,这是c++98新增的一项功能,但c++11却将其摒弃了。这意味着c++11仍然处于标准之中,但以后可能会从标准中剔除,因此不建议您使用...
  • foto1991
  • foto1991
  • 2016-05-08 15:07
  • 641

结构化异常处理和C++的异常处理区别

Windows异常由系统内核代码捕获,然后传递至用户层,多用于非法内存访问、指令错误等,其类型是CPU定义的,参见《X386保护模式编程》。 C++异常是C++编译器生成的结构(多在堆栈上),是普通的用户层代码,异常类型由用户自定义。 由于Windows异常处理和C++异常处理均使用堆栈展开,在局部...
  • wxtsmart
  • wxtsmart
  • 2008-09-28 17:54
  • 1825

C++中异常处理与if判断的问题

异常情况也就是对情况是否异常做出的判断,那么异常处理和if判断语句有什么区别呢?各有什么好处? if-else 方式的好处在于更贴近与逻辑思维,性能优于Exception。相对于Exception,其缺点是,不适合OOP,语义不明显,不易于错误错误跟踪或错误提示较少,并且类型比较单一。ex...
  • tinyway
  • tinyway
  • 2014-01-09 11:10
  • 407

C++程序中打印错误信息和标准错误流stderr

C++一共有三个标准流,分别是标准输入(stdin)、输出(stdout)、错误流(stderr) 标准刘定义和头文件 FILE *stdin; FILE *stdout; FILE *stderr; #include C++为这三个标准流分别定义了指针,stdin、stdout、stde...
  • Richard_123
  • Richard_123
  • 2014-12-07 19:33
  • 3790

C++异常处理实例

/************************************************************************************************ * 名 称:exceptions.cpp * 功 能:学习C++ Premi
  • JarvisChu
  • JarvisChu
  • 2011-07-22 22:41
  • 4027

c++异常捕获的通俗理解

异常,凡是写程序的基本都清楚,就像错误,时常会出现。 那么程序中异常处理非常重要,关于怎么捕获给个例子 try   {     被检查语句     throw 异常   }   catch(异常类型1)   {     进行异常处理的语句1   }   catch(异常类型2)   {...
  • songzi1111
  • songzi1111
  • 2013-07-11 13:07
  • 9807
    个人资料
    • 访问:26557次
    • 积分:382
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:14篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论