• (一)C++异常杂谈之初识异常对象


    关于C++异常对象的几点理解

    1、什么可以作为异常对象?

    异常对象并不像我之前想象的那么复杂,反之,C++异常对象时非常简单的。异常对象可以分为以下几类
    (1)C++的内置类型对象可以作为异常对象。比如:int、double
    (2)C++的标准库中定义的异常对象(类类型)

    标准异常类 描述 头文件
    exception 最通用的异常类,只报告异常的发生而不提供任何额外的信息 exception
    runtime_error 只有在运行时才能检测出的错误 stdexcept
    rang_error 运行时错误:产生了超出有意义值域范围的结果 stdexcept
    overflow_error 运行时错误:计算上溢 stdexcept
    underflow_error 运行时错误:计算下溢 stdexcept
    logic_error 程序逻辑错误 stdexcept
    domain_error 逻辑错误:参数对应的结果值不存在 stdexcept
    invalid_argument 逻辑错误:无效参数 stdexcept
    length_error 逻辑错误:试图创建一个超出该类型最大长度的对象 stdexcept
    out_of_range 逻辑错误:使用一个超出有效范围的值 stdexcept
    bad_alloc 内存动态分配错误 new
    bad_cast dynamic_cast类型转换出错 type_info

    除了抛出用户自定义的类型外,C++标准库定义了一组类,用户报告标准库函数遇到的问题。这些标准库异常类只定义了几种运算,包括创建或拷贝异常类型对象,以及为异常类型的对象赋值。
    (3)自定义的类类型的对象

    2、异常对象的特殊之处

    存储比较特殊,它不存储在堆内存中,又不存储在栈内存中。在windows下它存储在线程块TIB中。

    3、类类型的异常对象的特点?

    其名称往往代表了异常的类型。

    4、异常对象如何存储到特殊的内存块中?

    操作系统会根据throw+表达式构成的throw语句,使用复制构造函数将一份该类型的数据存储在特殊内存中。

    5、异常对象的作用是什么?

    起到一个信息匹配的功能,即将存在特殊内存中的异常对象与对应的catch进行信息匹配,然后决定执行哪个catch的代码。

  • 相关阅读:
    Promise链式调用 终止或取消
    uni-app input text-indent失效解决
    从浏览器输入url到显示页面的过程 (前端面试题)
    node.js切换多个版本
    防抖和节流
    vue子组件与子组件之前传值-----最简单办法
    Element源码---初识框架
    vue中父级与子组件生命周期的先后顺序
    vscode快捷键,让你脱离鼠标,敲代码嗖嗖的
    NHibernate代码监视
  • 原文地址:https://www.cnblogs.com/lasnitch/p/12260191.html
Copyright © 2020-2023  润新知