关于C++异常处理的思考

Java中有强制类型异常,但是C++中没有,其实强制类型异常任何语言都可以实现。例如在json11库中,解析json时,需要传递string& err作为参数,强制要求获取错误结果。在编程的时候,也是告诉程序员这个地方可能会出现异常,请一定要重视。程序员可以将当前的异常传递给调用的函数,继续执行,或直接返回。在Golang中,err作为很多函数的返回值,要求必须接收。这在一定程度上都模仿的java的强制异常,所以C++中也可以采用同样的方式,处理程序错误。

void func(int c, string& err)
{
    if(c==0)
    {
        err = "Error Info...";
        return;
    }
    //... Do Something
    return;
}

//Call
string err;
func(0, err);
if(!err.empty())
{
    printf(err);
}

个人感觉将string& err作为一个函数的参数,虽然在调用的时候回麻烦点,但是却可以从参数前面中明确看到该函数可能会执行失败,其次,这种方式相对固定,容易理解。而C语言习惯将错误结果作为返回值,使用不同的整形表示错误,这种实质上将错误认定为默认不处理对新手程序员并不很好,很容易漏掉重要的错误。其次,不同的错误结果代表了不同的错误类型,包含信息有限,出现错误时还需查询函数,而不能从日志中直接获取错误原因,可扩展性差。

对于C++11,异步编程变的更加普遍,将带有string&err的参数仍然可以放置在异步回调函数中,有种nodejs中诸多异步程序一样的编程体验。

func(function<void(string& err)> callback)
{
    thread t([&](){
        err = "Some Error";
        callback(err)
    });
    t.detach();
}

//Call
func([&](string& err){
    if(!err.empty()){
        printf(err);
    }
});

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值