第5章 语句

5.4.3 范围for

这种语句可以遍历容器或者其他序列的所有元素

for( declaration : expression)
    statement

这种循环与传统的for循环有等价关系:

vector<int> v = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
for( auto &r : v)
    r *= 2;

//等价于
for( auto beg = v.begin(); beg != v.end(); ++beg)
    (*beg) *= 2;

5.6 try语句块和异常处理

没有异常处理的话,发生异常后,会转到名为terminate的标准库函数,依据系统,一般会导致程序非正常退出。

throw表达式

使用throw表达式引发一个异常。

//<stdexcept>中定义了runtime_error异常
throw runtime_error("a exception occored");

try语句块

try
{
    //可能出错的语句
}
catch(runtime_error err)
{
    //对异常进行处理
}
catch(other_error o_err)
{
    //对上一个没有捕捉到的异常进行处理
}

标准异常

<exception>:定义了最通用的异常类,仅报告异常发生,不提供额外信息。

<stdexcept>:定义类常用的异常类

exception:最常见的问题

runtime_error:只有在运行时才能检测到的问题

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

overflow_error:运行时错误,计算上溢

underflow_error:运行时错误,计算下溢

logic_error:程序逻辑错误

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

invalid_argument:逻辑错误,无效参数

length_error:逻辑错误,试图创建一个超出改类型最大长度的对象

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

<new>:定义了bad_alloc异常类型

<type_info>:定义了bad_cast异常类型

我们只能默认初始化exception、bad_alloc、bad_cast异常对象,其他异常对象需要以string或者C风格字符串初始化。

异常类型定义了一个what成员函数,返回一个const char*字符串。

posted on 2015-05-04 21:39  峰入云  阅读(126)  评论(0编辑  收藏  举报

导航