C++ assert和异常捕获的对比

异常捕获(exception)和断言(assertion)的使用场景:
异常捕获:内存不足,运行时异常,用户输入错误(JSON格式不正确),数据库连接错误,IO错误
断言:写该代码的人造成的错误,例如指针为空(assert(nullptr!=p);)

 

一般生产环境不使用assert,因为会造成崩溃。
而异常捕获可用于给用户反馈,例如在HTTP服务中,用户发送的消息格式不正确(JSON格式非法),数据库连接错误,
这时候catch捕获对应的exception,并发送HTTP响应消息给客户端,返回错误码。

异常捕获伪代码:

catch (odb::exception &e)
{
			trans.rollback();
			LogError << "odb exception: " << e.what();
			res_msg["status"] = (int)ERR_DB_ACCESS;
			res_msg["message"] = "数据库错误";
			SendHttpResponse(context, res_msg);
			return;
}
catch (cppcms::json::bad_value_cast &e)
{
		LogError << "bad_value_cast exception: " << e.what();
		res_msg["status"] = (int)ERR_MESSAGE_FIELD_INCORRECT;
		res_msg["message"] = "需要的消息字段不存在或内容错误";
		SendHttpResponse(context, res_msg);
}
catch (std::exception &e)
{
		LogError << "exception: " << e.what();
		res_msg["status"] = (int)ERR_SERVER_ERROR;
		res_msg["message"] = "服务器错误";
		SendHttpResponse(context, res_msg);
}

总结:
assert用于检查产品上线前错误以及修复代码,生产环境不使用。
异常捕获用于处理不可控制的错误,生产环境可使用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值