zoukankan      html  css  js  c++  java
  • C++ Primer 第五章 语句

    第五章 语句

    5.1 范围for语句

    • 前面记录的范围for语句,形如for(declaration:expression) statement;
      其中
    vector<int>v = {0,1,2,3,4,5,6};
    for(auto &r : v) {
         r *= 2;
    }
    //等价于
    for(auto beg = v.begin(),end = v.end(); beg != end; beg++) {
        auto &r = *beg;
        r *= 2;
    }
    
    • 如上,因此不能通过范围for语句往vector中添加或删除对象,这样的结果可能使得end变得无效

    5.2 try语句和异常处理

    在C++中,异常处理包括

    • throw表达式:异常检测部分使用throw表达式来表示他遇到了无法处理的问题,我们说throw引发(raise)了异常
    • try语句块(try block):异常处理部分使用try语句块处理异常,try语句块以try开始,并以一个或多个catch字句结束。try语句块抛出的异常通常会以某个catch子句处理。因为catch子句“处理”异常,所以他们也被称作异常处理代码(exception handler)
    • 一套异常类,用于在throw表达式和相关的catch子句之间传递异常的具体信息

    5.2.1 throw表达式

    • throw表达式包含关键字throw和紧随其后的一个表达式,其中表达式的类型就是抛出的异常类型。throw表达式后面紧跟一个分号,从而构成一条表达式语句
    Sale_item item1,item2;
    cin >> item1 >> item2;
    if(item1.S() == item2.S()) {
        cout << item1.S() + item2.S() << endl;
        return 0;
    }else {
        cout << "error" << endl;
        return -1;
    }
    //等价于
    if(item1.S() != item2.S()) {
        throw runtime_error("error");
    }
    cout << item1 + item2 << endl;
    

    5.2.2 try语句块

    //通用语法形式
    try {
        program-statements;
    } catch (exception-declaration) {
        handler-statements;
    } catch (exception-declaration) {
        handle-statements;
    }
    

    如上面的例子,我们可以使用

    while(cin >> item1 >> item2) {
        try {
            cout << item1.S() + item2.S() << endl;
            break;
        } catch (runtime_error err) {
            cout << "err.what(), try again?" << endl;
        }
    }
    

    5.2.3 标准异常

    C++标准库定义了一组类用于报告标准库函数遇到的问题,这些异常类也可以在用户编写的程序中使用,他们分别定义在四个头文件中

    1. exception头文件,定义了最痛有的异常类exception
    2. stdexcept定义了集中常用的异常类
    3. new头文件定义了bad_alloc异常类型
    4. type_info定义了bad_cast异常类型
    • stdexcept定义的异常类

      • exception 最常见的问题
      • runtime_error 只有在运行时才能检测出的问题
      • range_error 运行时错误:生成的结果超出了有意义的值域范围
      • overflow_error 运行时错误:计算上溢
      • underflow_error 运行时错误:计算下溢
      • logic_error 程序逻辑错误
      • domain_error 逻辑错误:参数对应的结果值不存在
      • invalid_argument 逻辑错误:无效参数
      • length_error 逻辑错误:试图创建一个超出该类型最大长度的对象
      • out_of_range 逻辑错误:使用一个超出有效范围的值
    • 异常类型只定义了一个名为what()的成员函数,没有任何参数,返回一个const char*,该字符串用于提供关于异常的文本信息

  • 相关阅读:
    poj 1113 Wall 凸包的应用
    NYOJ 78 圈水池 (入门级凸包)
    Monotone Chain Convex Hull(单调链凸包)
    poj Sudoku(数独) DFS
    poj 3009 Curling 2.0(dfs)
    poj 3083 Children of the Candy Corn
    Python join()方法
    通过FISH和下一代测序检测肺腺癌ALK基因融合比较
    华大病原微生物检测
    NGS检测ALK融合大起底--转载
  • 原文地址:https://www.cnblogs.com/Hugh-Locke/p/13221580.html
Copyright © 2011-2022 走看看