【翁恺】34-异常语句

try blocks

  • try blocks

    try {...}
        catch ...
        catch ...
  • establishes any number of handers

  • not needed if you don't use any handlers

  • shows where you expert to handle exceptions

  • const cycles

exception handlers

  • select exception by type

  • can re-raise exceptions

  • two forms

    catch (SomeType v){}//handler code  很像函数
    catch(...){}//handler code  处理所有异常,但是得不到异常对象
  • take a single argument(like a formal parameter)

selecting a handler

  • can have any number of handlers

  • handlers are checked in order of appearance  针对每一个catch做下面的 1, 2, 3

    1. check for exact match
    2. apply base class conversions
      • reference and pointer type,only
    3. ellipses(...) match all

    inheritance can be used to structure exceptions

example:using inheritance

  • hierarchy of exception types

    class MathErr{
        ...
        virtual void diagnstic();
    };
    class OverflowErr:pubic MathErr{...}
    class UnderflowErr:pubic MathErr{...}
    class ZeroDivideErr:pubic MathErr{...}

using handlers

try{
    //code to expercise math options 
    throw UnderFlowErr
}catch(ZeroDivideErr& e){
    //handle zero divide cade
}catch(MathErr& e){
    //handle other math errors
}catch(...){
    //any other exceptions
}

exception specifications

  • declare which exceptions function might raise

  • part of function prototypes

    void abc(int a):throw(MathErr){ //约束abc只抛出MathErr异常
        ...
    }
  • not checked at compile time

  • at run time

    • if an exceptions not in the list propagates out,the "unexpected" exception is raised

examples

Printer::print(Document&):throw(PrinterOfffLine,BadDocument){
    ...
    PintManager::print(Document&):throw (BadDocument){
        //raises or doesn't handle BadDocuement
    	}
    void  googguy():throw(){ // 什么都不抛出
        //handle all exceptions
    }
    voi average(){}//no spec, no checking
}

exceptions and new

  • new does NOT returned 0 on failure

  • new raises a bad_alloc() exception

    void func(){
        try{
            while(1){
                char*p = new char[10000];
            }
        }catch(bad_alloc& e)
     }	
    }

failure in constructors:  构造函数中出现异常

  • no return value is possible
  • use an "uninitialized flag"
  • defer work to an init() function

better throw an exception

if you constructor can't complete,throw an exception  构造没有完成,析构不能调用

  • dtors for objects whose ctor didn't complete won't be called
  • clean up allocated resources before throwing  
#include<iostream>
using namespace std;
 
 
class A 
{
public:
	A() { buf = new char[1024]; delete this; throw 0; }
	~A() { delete buf; }
};
 
 
int main()
{
	A a;//析构没做,但是空间已经收回了,如果析构里有delete相关的,也不能收回空间,a本身不是垃圾,但buf是
	A* p = new A();//构造函数没有成功执行,运行不到delete回收空间
	delete p;
	return 0;
}
//main.cpp

programming with exceptions

prefer catching exceptions by reference

  • throwing/catching by value involves slicing

    struct X{}
    struct Y:pubic X{}
    try{
        throw Y():
    }catch(X x){
        //was it or Y?
    }
  • throwing/catching by pointer introduces coupling between normal and handler code:

    try{
        throw new Y();
    }catch(Y* p){
        //whoop ,forgot to delete
    }

catch exceptions by reference:   推荐做法

struct B{
    virtual void print(){...}
}
struct D : public B{...};

try {
    throw D("D error");
}
catch(B& b){
    b.print() // print D's error
}
### 回答1: 翁恺ct-dist的文件夹是指翁恺在编程项目中常用的文件夹之一。CT-Dist是一个常用的开源项目,用于计算文本之间的相似性。在这个项目中,翁恺通常会使用ct-dist文件夹来存放与CT-Dist相关的代码、配置文件和数据文件。 在ct-dist文件夹中,可能会包含以下内容: 1. 源代码文件:这些文件包含了CT-Dist项目的核心代码,用于实现文本相似性计算的算法和功能。这些代码文件通常以.py或.java等编程语言的扩展名为后缀。 2. 配置文件:这些文件用于设置CT-Dist项目的参数和选项,以便根据具体需求对文本相似性计算进行定制。配置文件的内容可以包括输入输出路径、特征提取方法、权重设置等。 3. 数据文件:CT-Dist项目在计算文本相似性时需要使用的数据文件,如语料库、词向量文件等。这些数据文件可以通过配置文件中的路径进行指定,并被代码读取和处理。 除此之外,ct-dist文件夹还可能包含测试文件、文档文件和结果输出文件等。测试文件用于验证CT-Dist项目的正确性和稳定性,文档文件则包含了关于CT-Dist项目的详细说明和使用指南。结果输出文件则保存了CT-Dist计算得到的文本相似性结果。 总之,翁恺ct-dist的文件夹是存放与CT-Dist项目相关的代码、配置文件和数据文件的文件夹。它是翁恺在编程项目中的一个重要组成部分,用于实现文本相似性计算的功能。 ### 回答2: 翁恺ct-dist是一个文件夹,它可能是一个软件项目的一部分。ct-dist是一个常用的命名约定,通常表示"可执行项目的构建产物",也可以解释为"编译和分发的文件夹"。在这个文件夹中,通常包含了经过编译和处理过的项目文件,以便进行部署和分发。 在ct-dist文件夹中,我们通常可以看到一些特定的文件和文件夹。其中包括编译后的可执行文件,如二进制文件或可执行脚本,这些文件通常表示程序的最终产物。还可能包含一些配置文件,用于指定程序的运行环境和参数设置。此外,ct-dist文件夹中还可能包含一些资源文件,如图片、样式文件或其他必要的外部文件,这些文件在程序运行过程中可能需要被引用。 翁恺ct-dist文件夹的存在对于项目的部署和分发非常重要。通过将编译后的可执行文件和其他必要的文件放在同一个文件夹中,开发人员可以方便地进行项目的打包和分发。这样,其他用户或部署人员只需要将整个ct-dist文件夹复制到他们的机器上,即可执行项目,而不需要再去处理源代码或其他依赖项。 总之,翁恺ct-dist文件夹是一个存放编译、处理后的项目文件的文件夹,它对于项目的部署和分发起着重要作用。通过将项目的最终产物和必要的资源文件集中在一个文件夹中,简化了项目的部署过程,使其他用户可以更轻松地使用和执行这个项目。 ### 回答3: 翁恺ct-dist文件夹是一个用于存放由翁恺所开发的CT(Computer Tomography,计算机断层扫描)图像处理程序的文件夹。CT-dist是翁恺开发的一个用于计算机断层扫描图像分析和处理的软件包。 CT(Computer Tomography)是一种医学成像技术,通过利用X射线在人体内进行多个角度的扫描,然后将这些扫描数据进行重建,得到人体不同层面的断层图像。CT图像具有丰富的信息,可以帮助医生进行疾病诊断和治疗方案制定。但是,由于CT图像数据量大、复杂、难以直接观察和分析,因此需要借助计算机进行图像处理和分析。 翁恺ct-dist文件夹中存放的程序主要用于CT图像分析和处理。这些程序包括了一系列的算法和方法,可以实现CT图像的预处理、降噪、增强、分割和三维重建等功能。通过这些程序,医生和研究人员可以提取出感兴趣的区域,进行病变检测和定量分析,从而辅助医学诊断和研究。 翁恺ct-dist文件夹的程序主要基于计算机视觉和数字图像处理的理论和方法。翁恺是计算机视觉和医学图像处理领域的专家,他的研究成果在CT图像分析和处理方面具有重要的应用价值。因此,翁恺ct-dist文件夹中的程序不仅可以促进医学图像处理的研究和发展,同时也对于提高CT图像的质量和临床应用具有重要的意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

理心炼丹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值