码迷,mamicode.com
首页 > 编程语言 > 详细

C++ Primer 第五章 语句

时间:2020-07-01 22:05:47      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:inf   存在   handler   type   开始   运行时错误   删除对象   exce   遇到的问题   

第五章 语句

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

C++ Primer 第五章 语句

标签:inf   存在   handler   type   开始   运行时错误   删除对象   exce   遇到的问题   

原文地址:https://www.cnblogs.com/Hugh-Locke/p/13221580.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!