码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++ 的异常处理,try, catch, throw


    C++ 引入了异常处理机制。其基本思想是:函数 A 在执行过程中发现异常时可以不加处理,而只是“拋出一个异常”给 A 的调用者,假定为函数 B。

    拋出异常而不加处理会导致函数 A 立即中止,在这种情况下,函数 B 可以选择捕获 A 拋出的异常进行处理,也可以选择置之不理。如果置之不理,这个异常就会被拋给 B 的调用者,以此类推。

    如果一层层的函数都不处理异常,异常最终会被拋给最外层的 main 函数。main 函数应该处理异常。如果main函数也不处理异常,那么程序就会立即异常地中止。

    C++异常处理基本语法

    C++ 通过 throw 语句和 try...catch 语句实现对异常的处理。throw 语句的语法如下:

    throw 表达式;

    该语句拋出一个异常。异常是一个表达式,其值的类型可以是基本类型,也可以是类。

    try...catch 语句的语法如下:

    1. try {
    2. 语句组
    3. }
    4. catch(异常类型) {
    5. 异常处理代码
    6. }
    7. ...
    8. catch(异常类型) {
    9. 异常处理代码
    10. }

    catch 可以有多个,但至少要有一个。

    不妨把 try 和其后{}中的内容称作“try块”,把 catch 和其后{}中的内容称作“catch块”。

    try...catch 语句的执行过程是:

    • 执行 try 块中的语句,如果执行的过程中没有异常拋出,那么执行完后就执行最后一个 catch 块后面的语句,所有 catch 块中的语句都不会被执行;
    • 如果 try 块执行的过程中拋出了异常,那么拋出异常后立即跳转到第一个“异常类型”和拋出的异常类型匹配的 catch 块中执行(称作异常被该 catch 块“捕获”),执行完后再跳转到最后一个 catch 块后面继续执行。

    例如:

    1. int main() {
    2. int a, b;
    3. cin >> a >> b;
    4. try {
    5. if (b == 0) {
    6. throw - 1; //抛出int类型异常
    7. }
    8. }
    9. catch (double d) {
    10. cout << "catch(double)" << d << endl;
    11. }
    12. catch (int e) {
    13. cout << "catch(int)" << e << endl;
    14. }
    15. cout << "finished" << endl;
    16. return 0;
    17. }

    输入:4 0

    输出:

    1. catch(int)-1
    2. finished

  • 相关阅读:
    用Python把csv文件批量修改编码为UTF-8格式并转为Excel格式
    Redis从入门到精通(二)-进阶篇
    打开常用软件出现msvcp140.dll丢失的解决方法,msvcp140.dll是什么东西?
    【论文阅读】HTTP 流量和恶意 URL 的异常检测
    网络安全--对称加密
    Git(SourceTree)变基操作使用
    将网址转化为map或对象,方便取值
    【已解决】vue项目之爆红红红红······
    LVS负载均衡模式与F5负载均衡产品介绍,新手必读
    【3568开发板教程上新】Android11移植开发教程升级来袭!
  • 原文地址:https://blog.csdn.net/weixin_46653651/article/details/133822091
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号