首页 > 其他分享 >八. 异常处理和命名空间

八. 异常处理和命名空间

时间:2023-12-04 17:36:36浏览次数:34  
标签:处理 MyException int 命名 include 异常 throw

1. 异常处理

注意:以下内容在C++11中进行了优化,不再适用。

C++98中,为程序可能出现的异常提供了一套完整的机制,其基本语法如下:

  • 抛出异常:

    throw 表达式;
    
  • try catch代码块:

    try{
    	复合语句
    }catch(异常类型){
        复合语句
    }catch(异常类型){
        复合语句
    }
    

抛出机制:

当函数发生异常要被抛出时,从进入try块开始,到throw异常之间在栈内构建的所有对象,都会被自动析构。析构的顺序与构造的顺序相反。这一过程被称为栈的解旋

异常接口声明:C++98为了增强程序可读性,可以在函数生命中列出那些可能抛出的异常类型,常有方式有三种:

  • 指定可以抛出的异常类型:在函数后加上throw(异常类型1, 异常类型2...)

    #include <iostream>
    #include <string>
    using namespace std;
    
    // 自己定义的异常类
    struct MyException{
        int code;
        string msg;
        MyException(int a, string s): code(a), msg(s){}
    };
    // 可以抛出MyException、int类型的异常
    double divide(int a, int b) throw (MyException, int){
        if(b == 0){
            throw MyException(1, "除数不能为0");
            // throw 1
        }
        return a/b;
    }
    
    int main(void){
        int a = 10;
        int b = 0;
        try{
            double result = divide(a, b);
        }
        catch(int e){
            cout << e << endl;
        }
        catch(MyException e){
            cout << e.code << "\t" << e.msg << endl;
        }
        return 0;
    }
    
  • 抛出任意类型的异常:在函数后不使用throw()即可。

    // 自己定义的异常类
    struct MyException{
        int code;
        string msg;
        MyException(int a, string s): code(a), msg(s){}
    };
    double divide(int a, int b){
        if(b == 0){
            throw MyException(1, "除数不能为0");
            // throw 1
        }
        return a/b;
    }
    
  • 不抛出异常:在函数后使用throw(),且不添加任何参数,表示该函数不允许抛出异常。

    // 自己定义的异常类
    struct MyException{
        int code;
        string msg;
        MyException(int a, string s): code(a), msg(s){}
    };
    double divide(int a, int b) throw()
    {
        if(b == 0){
            throw MyException(1, "除数不能为0");
            // throw 1
        }
        return a/b;
    }
    

2. 命名空间

定义:

所谓命名空间,就是一个程序设计者命名的内存区域。程序设计者可以根据需要指定一些有名字的命名空间,将各命名空间的标识符与该命名空间标识符建立关联,保证不同命名命名空间的同名标识符不发生冲突

Eg:

  • 编写命名空间文件:my_space.h

    using namespace{
        int a = 10;
        int add (int x, int y){
            return x + y;
        }
    }
    
  • 测试文件:test.cpp

    #include <iostream>
    #include "my_space.h"
    
    int main(void){
        my_space::a = 20;
        std::cout << my_space::add(1, 2) << std::endl;
        return 0;
    }
    

头文件命名规则:

  • C中:程序头文件包含扩展名.h,例如:

    #include <stdio.h>
    
  • 在C++中,程序头文件不应当包含扩展名,例如:

    #include <iostream>
    #include <cstring>
    

标签:处理,MyException,int,命名,include,异常,throw
From: https://www.cnblogs.com/beasts777/p/17875477.html

相关文章

  • 文字处理软件Word mac特点介绍
    MicrosoftWordmac是一款文字处理软件。它是Microsoft office 套件的一部分,已广泛用于创建、编辑和格式化文本文档。Wordmac软件特点改进的协作工具:使用MicrosoftWord2021,多个用户可以同时处理一个文档,从而更轻松地与同事或同学协作。增强的人工智能写作辅助:新版Word配备......
  • go-carbon v2.2.14 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库
    carbon是一个轻量级、语义化、对开发者友好的golang时间处理库,支持链式调用。目前已被awesome-go收录,如果您觉得不错,请给个star吧github.com/golang-module/carbongitee.com/golang-module/carbon安装使用Golang版本大于等于1.16//使用github库goget-ugithu......
  • charles-造数据,接口返回值固定怎么处理
    问题现象:界面请求第三方接口时,某个字段没有返回正确或者想要修改接口返回值,那么解决的办法是打断点,每次修改接口返回值,但是这样做太麻烦了,测试100次,得改100次。         所以有个简单的办法,只需要将接口返回保存到一个文件中,每次请求都走这个文件,就解决了这个......
  • 后台处理指南
    后台处理指南 | Android开发者 | AndroidDevelopershttps://developer.android.google.cn/guide/background?hl=zh-cnProcessingdatainthebackgroundisanimportantpartofcreatinganAndroidapplicationthatisbothresponsiveforyourusersaswella......
  • 一种全新的日志异常检测评估框架:LightAD
    本文分享自华为云社区《【AIOps】一种全新的日志异常检测评估框架:LightAD,相关成果已被软工顶会ICSE2024录用》,作者:华为云PaaS服务小智。深度学习(DL)虽然在日志异常检测中得到了不少应用,但在实际轻量级运维模型选择中,必须仔细考虑异常检测方法与计算成本的关系。具体来说,尽管深......
  • 全局异常捕获
    DispatcherUnhandledException——UI线程未被处理的异常捕获从App对象中订阅DispatcherUnhandledException事件publicpartialclassApp:Application{publicApp(){//DispatcherUI线程未被处理的异常this.Disp......
  • python处理Excel文件
    一.读取Excel文件在Python中,你可以使用pandas库来读取Excel文件。首先,确保你已经安装了pandas和openpyxl库。如果没有安装,可以使用以下命令进行安装:pipinstallpandasopenpyxl安装完成后,你可以使用以下代码来读取Excel文件:importpandasaspd#读取Excel文件fil......
  • Java异常处理
    异常处理是Java编程中的一个核心概念,它提供了一种强大的方法来处理运行时错误,使我们的程序更加健壮。异常是程序运行过程中发生的不正常情况,它打断了正常的指令流。本文将介绍Java中的异常处理机制,包括异常的类型、如何捕获和处理异常,以及自定义异常。异常类型在Java中,所有的异常都......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-35-处理web页面定位toast-上篇
    1.简介在使用appium写app自动化的时候介绍toast的相关元素的定位,在WebUI测试过程中,也经常遇到一些toast(出现之后一闪而过,不留下一点点痕迹),那么这个toast我们这边如何使用playwright进行定位测试呢?今天宏哥就分两篇介绍一下。2.什么是toast?Android中的Toast是一种简易的消......
  • 英特尔 N100 处理器跑分出炉:达 i5-7400 水平
    英特尔今年推出了采用最新Intel7工艺的全小核处理器,其中N100为4核4线程。在最新的Geekbench6跑分平台上,N100的成绩与英特尔i5-7400桌面处理器基本一致。IntelN100Inteli5-7400如上图所示,英特尔N100处理器跑分虽然不算高,但不论单核还是多核,分数均达到了i5......