《编写高质量代码:改善C++程序的150个建议》读书笔记5(关于异常处理的部分)
2016-03-05 14:25
225 查看
1. 处理异常采用"throw by value, catch by reference"的方式。
另外,一般如果异常对象不会改变的话,就在catch()中将作为参数的异常对象写成const的。
2. catch中再次抛出异常时使用throw;不带参数。表示将原来的异常对象抛出。不要带上catch后面的那个参数表示的异常。
就是下面的形式:
3. 函数和catch子句的异同。
两者的形式如下:
1) 函数是有返回值的,它最终都会返回到调用者;catch子句不会返回。
2) catch子句虽然使用了引用参数,但是还是要调用构造函数,也就是说异常对象在try中生成时调用一次构造函数,传到catch子句还要调用一次;但是如果是函数,且函数的参数是引用的话,那么只有实参生成的时候要调用一次,传递给函数的时候不需要再次调用构造函数。
3) 实参传递时,传递到catch中的隐式转换要比传递到函数中的隐式转换少很多;只有两种类型,一是类型转换到无类型指针;二是基于继承的类型转换。总的来说,catch子句需要更精确的类型匹配。
4) catch子句采用的是参数最先匹配,函数采用的是参数最优匹配。
最后,书中有这么一句话:”Google说,我们不使用C++异常“......
另外,一般如果异常对象不会改变的话,就在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++异常“......
相关文章推荐
- 学习C++反汇编-单继承
- 【学习C++】1.开始学习C++
- 1026. Table Tennis (30)
- 【C++学习之路】派生类的构造函数(三)
- 《Effective C++》Rule42: 了解 typename 的双重意义
- C++中的析构函数为什么通常为虚函数
- C语言获取系统当前时间转化成时间字符串
- C++项目文件中的后缀名为SDF的文件是什么?有什么用?
- c++primer(第五版) 第十章 泛型算法习题答案
- 【总结】逆置双向链表的三种方法
- 重拾c语言——指针与数组
- POJ1190
- C语言解释器的实现--序(零)
- C++ 17 的最新动态
- C++容器详解
- C语言调用动态库中的函数的方法(dlopen,dlsym等)
- c语言概述
- vs2013 c++項目轉 vs2008
- C/C++ 声卡编程代码
- C++类的静态成员(static members in classes)