C++Primer 5th Chap5 Statements

else语句对应的始终是最近的那条if语句,除非有{}强行控制,如:

  if(A){

    if(B){/*.............*/}

  }else{/*.......*/}//这里else和if(A)对应

break和continue处理的都是离其最近的循环(if语句不算循环)

异常处理

  throw语句(引发异常),try语句块(处理异常),catch子句(结束try语句)

  例如:throw

     if(item1.isbn()!=item2.isbn){

      throw runtime_error("Data must refer to same ISBN!");}//抛出异常,中止函数(runtime_error为一种异常类型,在头文件stdexcept中)

     cout<<item1+item2<<endl;

     try:

     while(cin>>item1>>item2){

      try{

        cout<<item1+item2<<endl;}//想要执行的语句

      catch(runtime_error err){//若失败则执行catch语句,抛出runtime_error 异常

        cout<<err.what()<<"\nTry again? Enter 'y' or 'n'"<<endl;

        char c;

        cin>>c;

        if(!cin||c=='n')break;} }

 标准异常:

   头文件:

exception 定义最通用的异常类,只报告异常发生,无额外信息
stdexcept 定义几种常见的异常类
new 定义bad_alloc异常类型
type_info 定义bad_cast异常类型

 

 

 

 

  stdexcept头文件中的异常类:

exception 常见问题
runtime_error 运行时才能检测到的问题
range_error 运行时错误:结果超出值域范围
overflow_error 运行时错误:上溢
underflow_error 运行时错误:下溢
logic_error 逻辑错误
domain_error

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

invalid_argument 逻辑错误:参数无效
length_error 逻辑错误:试图创建超出类型最大长度的对象
out_or_range 逻辑错误:使用超出有效范围的值

 

 

 

 

 

 

 

 

 

  

 

 

 

 

对exception,bad_alloc,bad_cast对象只能默认初始化(不提供初始值),其他类型用string或c字符数组初始化;

  异常类只有what()唯一成员函数,返回c字符数组,提供异常信息。

posted @ 2019-09-09 20:35  Dragonsburg  阅读(100)  评论(0编辑  收藏  举报