C++ Primer学习《Try和异常处理》

Try和异常处理


C++中异常处理包括三个

throw expressions,用来表示遇到了不能处理的异常,throw会抛出一个异常(a throw raises an exception)

try blocks,用来尝试"处理"异常情况

exception class,用来传递信息

Throw Expression

throw后跟一个表达式,这个表达式决定了抛出的异常的类型。

throw runtime_error("...");//抛出一个runtime_error异常
runtime_error是定义在stdexcept中的标准库异常类型,必须有一个string来初始化。

当然我们也可以抛出其他的error,见后面的standard exception

Try Block

语法如下:

try(
    program-statements
}catch(exception-declaration){
    handler-statements
}catch(exception-declaration){
    handler-statements
}//...
几点说明:

每个handler-statements执行完后,会跳出整个try block,而不像switch中的case那样会依次执行,所以不需要break在结尾。
一个例子:

while(cin>>item1>>item2){
    try{将item1和item2相加,如果出错,则throw一个runtime_error}
    catch(runtime_error err){
        cout<<err.what()<<"\nTry Again? y or n"<<endl;
        char c;
        cin>>c;
        if(!cin || c=='n')
           break;//注意这个break会直接跳出while循环
    }
}
注意:写出安全处理代码(exception safe code)是非常困难的!!C++ Primer说超出了本书的范围。

Standard Exception

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

exception:        the most general kind of problem
runtime_error:    problem that can be detected only at run time
range_error:      result generated outside the range of values that are meaningful
overflow_error:   computation that overflowed
underflow_error:  computation that underflowed
logic_error:      error int the logic of the program
domain_error:     argument for which no result exists
invalid_argument: inappropriate argument
length_error:     attempt to create an object larger than the maximum size for that type
out_of_range:     used a value outside the valid range

上述这些类型,只有exception可以被default initialize,其他的都必须用string或c-style string来初始化,而exception也能初始化。

每个类都只有一个成员函数,就是what(),what()不接受任何参数,返回一个char* 用来表示错误的内容。

C++还有一些其他的错误类型,如bad_alloc,bad_cast,在之后会介绍到。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值