《编写高质量代码:改善C++程序的150个建议》读书笔记5(关于异常处理的部分)

笔记5


1. 处理异常采用"throw by value, catch by reference"的方式。

另外,一般如果异常对象不会改变的话,就在catch()中将作为参数的异常对象写成const的。


2. catch中再次抛出异常时使用throw;不带参数。表示将原来的异常对象抛出。不要带上catch后面的那个参数表示的异常。

就是下面的形式:

	try {
		//代码
	}
	catch (std::exception c) {
		throw;//不要写throw c
	}

3. 函数和catch子句的异同。

两者的形式如下:

void func(int x);
catch(exception e);

两者的形式挺像,但是内在却差很多:

1) 函数是有返回值的,它最终都会返回到调用者;catch子句不会返回。

2) catch子句虽然使用了引用参数,但是还是要调用构造函数,也就是说异常对象在try中生成时调用一次构造函数,传到catch子句还要调用一次;但是如果是函数,且函数的参数是引用的话,那么只有实参生成的时候要调用一次,传递给函数的时候不需要再次调用构造函数。

3) 实参传递时,传递到catch中的隐式转换要比传递到函数中的隐式转换少很多;只有两种类型,一是类型转换到无类型指针;二是基于继承的类型转换。总的来说,catch子句需要更精确的类型匹配。

4) catch子句采用的是参数最先匹配,函数采用的是参数最优匹配。


最后,书中有这么一句话:”Google说,我们不使用C++异常“......

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值