• [010]Try块和异常处理


    Throw表达式和try块的定义如下:

    1. throw 表达式,错误检测部分使用这种表达式来说明遇到了不可处理的错误。可以说,throw 引发了异常条件。
    2. try 块,错误处理部分使用它来处理异常。try 语句块以 try 关键字开始,并以一个或多个 catch 子句结束。在 try 块中执行的代码所抛出 (throw)的异常,通常会被其中一个 catch 子句处理。由于它们“处理” 异常,catch 子句也称为处理代码。
    3. 由标准库定义的一组异常类,用来在 throw 和相应的 catch 之间传递有关的错误信息。

    举个例子来说明是最好的方法:

    bitset 类提供 to_ulong 操作,如果 bitset 提供的位数大于 unsigned long 的长度时,抛出一个overflow_error 异常。编写产生这种异常的程序。

    代码如下:

     1 #include<iostream>
     2 #include<bitset>
     3 
     4 using namespace std;
     5 
     6 int main() {
     7     bitset<1000>bs;
     8 
     9     for(int i = 0; i != bs.size(); i++) {
    10         bs[i] = 1;
    11     }
    12 
    13     try {
    14         bs.to_ulong();
    15     }
    16     catch (runtime_error err) {
    17         cout << err.what()
    18              << "	Wrong!"<< endl;
    19     }
    20 
    21 }

    C++标准库定义了一组类,用于报告标准数据库中的函数遇到的问题。

    在 <stdexcept> 头文件中定义的标准异常类

    exception 最常见的问题。

    runtime_error 运行时错误:仅在运行时才能检测到问题

    range_error 运行时错误:生成的结果超出了有意义的值域范围

    overflow_error 运行时错误:计算上溢

    underflow_error 运行时错误:计算下溢

    logic_error 逻辑错误:可在运行前检测到问题

    domain_error 逻辑错误:参数的结果值不存在

    invalid_argument 逻辑错误:不合适的参数

    length_error 逻辑错误:试图生成一个超出该类型最大长度的对象

    out_of_range 逻辑错误:使用一个超出有效范围的值

    每一个标准库异常类都定义了名为 what 的成员函数。这个函数不需要参数,返回 C 风格字符串。

    另外,new 头文件定义了 bad_alloc 异常类型,提供因无法分配内在而由 new抛出的异常。type_info 头文件定义了 bad_cast 异常类型。

  • 相关阅读:
    名称空间与作用域
    3.19作业
    函数的参数
    文件的f.seek和文件修改方式以及函数的基本使用
    3.17作业
    文件处理
    3.16作业
    转 移动端-webkit-user-select:none导致input/textarea输入框无法输入
    移动端开发兼容性总结
    移动端input 无法获取焦点的问题
  • 原文地址:https://www.cnblogs.com/hustcser/p/3666367.html
Copyright © 2020-2023  润新知