学习《高质量C++编程指南》--第十一章《其它编程经验》
2013-03-23 14:39
260 查看
一、Use const whenever you need
1.const修饰函数的参数
(1)对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const引用传递”,目的是提高效率。例如将void Func(A a)改为void Func(const A &a)。对于内部数据类型,则无需将值传递改为引用传递,因为内部数据类型不存在构造和析构的过程,其复制也非常快,值传递的效率和引用传递的效率相当。
(2)对于内部数据类型的输入参数,不要将“值传递”的方式改为“const引用传递”。否则既达不到提高效率的目的,又降低了函数的可理解性。例如void Func(int x)不应该改为void Func(const int &x)。
2.用const修饰函数的返回值
(1)如果给以“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const修饰的同类指针。
(2)如果函数返回值采用“值传递方式”,由于函数会吧返回值复制到外部临时的存储单元中,加const修饰没有任何价值。
(3)函数返回值采用“引用传递”的场合并不多,这种方式一般只出现在类的赋值函数中,目的是为了实现链式表达。
3.const成员函数
任何不会修改数据成员的函数都应该声明为const类型。
注:
(1)如果把const的数据赋给非const,会编译错误。
(2)如果在const成员函数中,修改了数据成员或者调用了非const成员函数,会编译错误。
二、提高程序的效率
1.不要一味地追求程序的效率,应当在满足正确、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率。
2.以提高程序的全局效率为主,提高局部效率为辅。
3.在优化程序的效率时,应当先找出限制效率的“瓶颈”,不要在无关紧要之处优化。
4.先优化数据结构和算法,再优化执行代码。
5.有时候时间效率和空间效率可能对立,此时应当分析哪个更重要,作出适当的折中。例如多花费一些内存来提高性能。
6.不要追求紧凑的代码,因为紧凑的代码并不能产生高效的机器码。
三、一些有益的建议
1.当心那些视觉上不易分辨的操作符发生书写错误。例如“==”和“=”。
2.变量(指针、数组)被创建后应当及时把它们初始化,以防止把未初始化的变量当成右值使用。
3.当心变量的初值、缺省值错误,或者精度不够。
4.当心数据类型转换发生错误。尽量使用显式的数据类型转换(让人们知道发生了什么事),避免让编译器轻悄悄地进行隐式的数据类型转换。
5.当心变量发生上溢或下溢,数组的下标越界。
6.当心忘记编写错误处理程序,当心错误处理程序本身有误。
7.当心文件I/O有错误。
8.避免编写技巧性很高代码。
9.不要设计面面俱到、非常灵活的数据结构。
10.如果原有的代码质量比较好,尽量复用它。但是不要修补很差劲的代码,应当重新编写。
11.尽量使用标准函数库,不要“发明”已经存在的库函数。
12.尽量不要使用与具体硬件或软件环境关系密切的变量。
13.把编译器的选择项设置为最严格状态。
14.如果可能的话,使用PC-Lint、LogiScope等工具进行代码审查。
1.const修饰函数的参数
(1)对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const引用传递”,目的是提高效率。例如将void Func(A a)改为void Func(const A &a)。对于内部数据类型,则无需将值传递改为引用传递,因为内部数据类型不存在构造和析构的过程,其复制也非常快,值传递的效率和引用传递的效率相当。
(2)对于内部数据类型的输入参数,不要将“值传递”的方式改为“const引用传递”。否则既达不到提高效率的目的,又降低了函数的可理解性。例如void Func(int x)不应该改为void Func(const int &x)。
2.用const修饰函数的返回值
(1)如果给以“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const修饰的同类指针。
(2)如果函数返回值采用“值传递方式”,由于函数会吧返回值复制到外部临时的存储单元中,加const修饰没有任何价值。
(3)函数返回值采用“引用传递”的场合并不多,这种方式一般只出现在类的赋值函数中,目的是为了实现链式表达。
3.const成员函数
任何不会修改数据成员的函数都应该声明为const类型。
注:
(1)如果把const的数据赋给非const,会编译错误。
(2)如果在const成员函数中,修改了数据成员或者调用了非const成员函数,会编译错误。
二、提高程序的效率
1.不要一味地追求程序的效率,应当在满足正确、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率。
2.以提高程序的全局效率为主,提高局部效率为辅。
3.在优化程序的效率时,应当先找出限制效率的“瓶颈”,不要在无关紧要之处优化。
4.先优化数据结构和算法,再优化执行代码。
5.有时候时间效率和空间效率可能对立,此时应当分析哪个更重要,作出适当的折中。例如多花费一些内存来提高性能。
6.不要追求紧凑的代码,因为紧凑的代码并不能产生高效的机器码。
三、一些有益的建议
1.当心那些视觉上不易分辨的操作符发生书写错误。例如“==”和“=”。
2.变量(指针、数组)被创建后应当及时把它们初始化,以防止把未初始化的变量当成右值使用。
3.当心变量的初值、缺省值错误,或者精度不够。
4.当心数据类型转换发生错误。尽量使用显式的数据类型转换(让人们知道发生了什么事),避免让编译器轻悄悄地进行隐式的数据类型转换。
5.当心变量发生上溢或下溢,数组的下标越界。
6.当心忘记编写错误处理程序,当心错误处理程序本身有误。
7.当心文件I/O有错误。
8.避免编写技巧性很高代码。
9.不要设计面面俱到、非常灵活的数据结构。
10.如果原有的代码质量比较好,尽量复用它。但是不要修补很差劲的代码,应当重新编写。
11.尽量使用标准函数库,不要“发明”已经存在的库函数。
12.尽量不要使用与具体硬件或软件环境关系密切的变量。
13.把编译器的选择项设置为最严格状态。
14.如果可能的话,使用PC-Lint、LogiScope等工具进行代码审查。
相关文章推荐
- 我2年学习编程的经验总结
- 编程经验系列-Java学习杂谈(八)
- C++编程规范---第11章 其它编程经验
- 编程学习经验
- Java学习编程经验分享
- 程序员技术练级攻略 – 学习编程的步骤 | 编程学习经验
- 编程经验系列-Java学习杂谈(七)
- 2016-10-15今开始分享个人编程经验及向各位童鞋学习
- 高质量C++/C编程指南 -- 第11章 其它编程经验 参考文献
- 谈一谈网络编程学习经验(06-08更新)
- C#编程学习入门经验 (一) 独孤九剑之破剑篇
- 谈一谈网络编程学习经验
- 编程经验系列-Java学习杂谈(六)
- C++编程规范---第11章 其它编程经验
- 高质量c++/c编程指南--其它编程经验
- fukan之编程小经验技巧学习与总结(持续更新~)
- 谈一谈网络编程学习经验(06-08更新)
- 高质量C++/C编程指南 -- 第11章 其它编程经验
- UNIX环境高级编程学习之第十一章线程-使用读写锁
- 谈一谈网络编程学习经验(06-08更新)