c++异常抛出

异常规范,出现在声明函数中,表示这个函数可能抛出异常的类型


void GetTag() throw();表示不会抛出任何异常

void GetTag() throw(int);表示只抛出int类型异常

throw(int),并不表示一定会抛出异常,但是一旦抛出异常只会抛出int类型,如果抛出非int类型异常,调用unexsetpion()函数,退出程序。 

void GetTag() throw(int,char);表示抛出in,char类型异常
void GetTag() throw();表示不会抛出任何类型异常
void GetTag() throw(...);表示抛出任何类型异常

void GetTag() throw(int);表示只抛出int类型异常



加一个throw()属性到你的永远不会抛出异常的函数中,编译器会知道代码的意图和决定优化方式。

代码如下:

class MyClass 
{ 
    size_t MethodThatCannotThrow() throw() 
    { 
	return 0; 
    }; 
    void ExampleMethod() 
    { 
        try 
        { 
            MethodThatCannotThrow(); 
        } 
        catch (...) 
        { 
        } 
    } 
}; 

但是,调用的函数都已经标记了throw(),实际上不需要try/catch。


捕抓double异常,代码如下:

#include<iostream.h>                                 //包含头文件
#include<stdlib.h>
#define MIN_VALUE (1e-8)  //根据需要调整这个值
#define IS_DOUBLE_ZERO(d) (abs(d) < MIN_VALUE)

double fuc(double x, double y)                        //定义函数
{
    if(IS_DOUBLE_ZERO(y))
    {
        throw y;                                    //除数为0,抛出异常
    }
    return x/y;                                    //否则返回两个数的商
}
void main()
{
   double res;
   try                                            //定义异常
   {
       res=fuc(2,3);
       cout<<"The result of x/y is : "<<res<<endl;
       res=fuc(4,0);                                //出现异常
   }
   catch(double)                                    //捕获并处理异常
   {
        cerr<<"error of dividing zero.\n";
        exit(1);                                    //异常退出程序
   }
}






在使用 Halcon 19 进行 C++ 开发时,某些情况下未抛出异常的问题可能与 HALCON 的异常处理机制的设计方式有关。HALCON/C++ 提供了两种异常处理模式:**基于 C++ 异常(throw/catch)的机制**,以及**基于返回值的错误处理机制**。默认情况下,HALCON 可能并未启用 C++ 异常抛出功能,而是通过返回错误代码来指示操作失败。 这种情况通常与编译器设置或 HALCON 的配置有关。例如,在某些项目配置中,`HException` 类的使用可能被禁用,或者编译器未启用对 C++ 异常的支持,导致即使发生错误也不会抛出异常。在使用 HALCON 函数时,应检查返回值以判断操作是否成功[^1]。 此外,在使用 Microsoft Visual Studio(如 VS2019)进行开发时,若未正确配置项目属性(如未启用 `/EHa` 或 `/EHsc` 编译选项),也可能导致异常处理机制未能正常工作。需要确保项目配置与 HALCON 的异常处理模式一致[^2]。 为了启用 C++ 异常抛出机制,可以在代码中定义宏 `H_USE_EXCEPTIONS`,这样 HALCON 函数在发生错误时将抛出 `HException` 异常,而不是返回错误代码。例如: ```cpp #define H_USE_EXCEPTIONS #include "halconcpp.h" using namespace HalconCpp; int main() { try { // 示例代码:尝试加载不存在的图像以触发异常 HImage image; image.ReadImage("non_existent_image.png"); // 此操作应抛出异常 } catch (HException &except) { // 捕获 HALCON 异常并输出错误信息 std::cerr << "HALCON Exception: " << except.ErrorMessage() << std::endl; } catch (...) { std::cerr << "Unknown exception occurred." << std::endl; } return 0; } ``` 如果仍然未抛出异常,则应检查 HALCON 安装路径下的 `halconcpp.h` 头文件中是否启用了异常支持,或者确认使用的 HALCON 版本是否为支持 C++ 异常处理的版本。同时,确保程序的构建平台(32 位或 64 位)与 HALCON 库的版本一致,否则可能导致运行时错误未被正确捕获[^3]。 在 MFC 项目中使用 HALCON 时,还需要注意是否在头文件中正确引入了命名空间 `HalconCpp`,并确保所有函数调用的参数类型与 HALCON 接口要求的类型匹配。例如,传递 `HTuple` 参数时,应确保其类型与函数期望的参数类型兼容,否则可能导致未定义行为[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值