zoukankan      html  css  js  c++  java
  • 异常处理

    (1)try语句块内抛出的异常将被catch的参数(形参)捕获,然后在catch语句块内处理此捕获的异常。

    (2)当执行一个throw时,跟在throw后面的语句将不再被执行,程序的控制权由此转移到与之匹配的catch语句块。

    (3)为了一次性捕获所有异常,可以使用省略号作为异常声明,即catch(...)。此语句可以与任意类型的异常匹配。

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 void fun()
     6 {
     7     for (int i = 0; i < 10; ++i)
     8     {
     9         if (i == 6)
    10             throw i;
    11     }
    12 }
    13 
    14 int main()
    15 {
    16     try
    17     {
    18         fun();
    19     }
    20 
    21     catch (int a)      //此处的形参a捕获了抛出的i,将i作为了实参,所以此处输出i的值
    22     {
    23         cout << a << endl;
    24     }
    25 
    26     return 0;
    27 }
     1 #include <iostream>
     2 #include <string>
     3 using namespace std;
     4 
     5 void fun()
     6 {
     7     for (int i = 0; i < 10; ++i)
     8     {
     9         if (i == 6)
    10             throw "hello";       //此处的"hello"是字面值常量,为const char*类型,而不是string类型,所以将被s2捕获
    11     }                            //若要被string s1捕获,则需要在抛出的时候强制类型转换,即throw string("hello").
    12 }
    13 
    14 int main()
    15 {
    16     try
    17     {
    18         fun();
    19     }
    20     catch (string s1)           //若要被string s1捕获,则需要在抛出的时候强制类型转换,即throw string("hello").
    21     {
    22         cout << "string" << endl;
    23     }
    24 
    25     catch (const char* s2)
    26     {
    27         cout << "const char*" << endl;
    28     }
    29 
    30     
    31     
    32     return 0;
    33 }
     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 void fun()
     6 {
     7     for (int i = 0; i < 10; ++i)
     8     {
     9         if (i == 6)
    10             throw 'c';       
    11     }                            
    12 }
    13 
    14 int main()
    15 {
    16     try
    17     {
    18         fun();
    19     }
    20    
    21 
    22     catch (int a)
    23     {
    24         cout << a << endl;
    25     }
    26 
    27     catch (...)            //由于没有与char类型匹配的cath语句,所以此处匹配此任意类型的catch语句
    28     {
    29         cout << "..." << endl;
    30     }

    注意: 如果catch(...)与其他几个catch语句一起出现,则catch(...)必须在最后的位置。出现在捕获所有异常语句后面的catch语句将永远不会被匹配。

  • 相关阅读:
    Error和Exception的区别
    当try和finally都包含return时的执行顺序
    String,StringBuffer处理字符串的区别
    使用idea对XML的增删改查
    IO流,字节流复制文件,字符流+缓冲复制文件
    MySQL同步故障:" Slave_SQL_Running:No" 主从同步的从表进行了写操作
    常用MQ的对比冷知识
    Redis-避免缓存穿透
    Docker容器与虚拟化技术——部署KVM虚拟化平台
    HTML日记 第三篇 关于图片的冷知识(附带一些浮动的基础知识)
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/9346294.html
Copyright © 2011-2022 走看看