zoukankan      html  css  js  c++  java
  • C++学习41 exception类

    C++语言本身或者标准库抛出的异常都是 exception 的子类,称为标准异常(Standard Exception)。你可以通过下面的语句来匹配所有标准异常:

    try{
        //可能抛出异常的语句
    }catch(exception &e){
        //处理异常的语句
    }

    之所以使用引用,是为了提高效率。如果不使用引用,就要经历一次对象拷贝(拷贝对象时要调用拷贝构造函数)的过程。

    exception 类位于 <exception> 头文件中,它被声明为:

    class exception {
    public:
        exception () throw();  //构造函数
        exception (const exception&) throw();  //拷贝构造函数
        exception& operator= (const exception&) throw();  //运算符重载
        virtual ~exception() throw();  //虚析构函数
        virtual const char* what() const throw();  //虚函数
    }

    这里需要说明的是 what() 函数。what() 函数返回一个能识别异常的字符串,正如它的名字“what”一样,可以粗略地告诉你这是什么异常。不过C++标准并没有规定这个字符串的格式,各个编译器的实现也不同,所以 what() 的返回值仅供参考。

    下图展示了 exception 类的继承层次:

    图:exception 类的继承层次以及它们所对应的头文件

    先来看一下 exception 类的直接派生类:

    异常名称说  明
    logic_error 逻辑错误。
    runtime_error 运行时错误。
    bad_alloc 使用 new 或 new[ ] 分配内存失败时抛出的异常。
    bad_typeid 使用 typeid 操作一个 NULL 指针,而且该指针是带有虚函数的类,这时抛出 bad_typeid 异常。
    bad_cast 使用 dynamic_cast 转换失败时抛出的异常。
    ios_base::failure io 过程中出现的异常。
    bad_exception 这是个特殊的异常,如果函数的异常列表里声明了 bad_exception 异常,当函数内部抛出了异常列表中没有的异常时,如果调用的 unexpected() 函数中抛出了异常,不论什么类型,都会被替换为 bad_exception 类型。
  • 相关阅读:
    Working with WordprocessingML documents (Open XML SDK)
    How to Choose the Best Way to Pass Multiple Models in ASP.NET MVC
    Azure:Manage anonymous read access to containers and blobs
    Convert HTML to PDF with New Plugin
    location.replace() keeps the history under control
    On the nightmare that is JSON Dates. Plus, JSON.NET and ASP.NET Web API
    HTTP Modules versus ASP.NET MVC Action Filters
    解读ASP.NET 5 & MVC6系列(6):Middleware详解
    Content Negotiation in ASP.NET Web API
    Action Results in Web API 2
  • 原文地址:https://www.cnblogs.com/Caden-liu8888/p/5838775.html
Copyright © 2011-2022 走看看