• 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*,该字符串用于提供关于异常的文本信息

  • 相关阅读:
    流行-Manifold学习理解与应用
    狠心奶奶自断亲情,28年后孙女拒绝相见:人有没有不原谅的权利?
    学术论文常用词汇总结(待更新)
    机动车驾驶(2)--- 老司机经验
    关于MySQL数据导出导入
    php5.6-lumen与php5.6-phalcon性能对比
    win7(64bit)+python3.5+pyinstaller3.2安装和测试
    WARNING: Can not get binary dependencies for file...
    一些不错的计算机书籍
    PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载
  • 原文地址:https://www.cnblogs.com/Hugh-Locke/p/13221580.html
Copyright © 2020-2023  润新知