随着计算机语言的发展,我们现在编写一个程序越来越容易了。利用一些软件开发工具,往往只要通过鼠标的拖拖点点,计算机就会自动帮你生成许多代码。但在很多时候,计算机的这种能力被滥用了,我们往往只考虑把这个程序搭起来,而不去考虑程序的性能如何,程序是否足够的健壮。而此节课的目的主要是介绍一些编码的经验,让大家编写的程序更加健壮和高性能。 1、Prefer const and inline to #define static const double ASPECT_RATIO = 1.653; 第二,没有任何类型信息,不是type safe。因为它是文本级别的替换,这样不利于程序的维护。 第三,define的使用很容易造成污染。比如,如果有两个头文件都定义了ASPECT_RATIO, 而一个CPP文件又同时包含了这两个头文件,那么就会造成冲突。更难查的是另外一种错误,比如有如下的代码: // in header file def.h 在.h文件中Orange被定义成水果的一种,而在.cpp文件中Orange又成为了一种颜色,那么编译器就会把此处的Orange替换成2,编译可能仍然可以通过,程序也能够运行,但是这就成了一个bug,表现出古怪的错误,且很难查错。再比如定义了一个求a与b哪个数大的宏,#define max(a,b) ((a) > (b) ? (a) : (b)) int a = 5, b = 0; 在上面的操作中,max(++ a, b); 语句中a被++了两次,而max(++ a, b + 10); 语句中a只加了一次,这样在程序处理中就很有可能成为一个bug,且此bug也非常的难找。在实际编码时可以使用如下的语句来做: template<class T> 2、Prefer C++-style casts 在程序中经常会需要把一种类型转换成另外一种类型,在C++中应该使用static_cast、const_cast、dynamic_cast、reinterpret_cast关键字来做类型转换。因为这有以下好处,一是其本身就是一种注释,在代码中看到上面这些关键字就可马上知道此处是进行类型转换。二是C语言中类型转换通常是很难进行搜索的,而通过关键字cast则可以很容易的找到程序中出现类型转换的地方了。 3、Distinguish between prefix and postfix forms of increment and decrement operators 通常对于操作系统或编译器自身支持的类型,prefix(前缀,如++i)与postfix(后缀,如i++)的效果是一样的。因为现在的编译器都很聪明,它会自动做优化,这两者的汇编代码是一样的,性能不会有差别。但有时候也会有不同的,如一些重载了操作符的类型。下面是模拟prefix与postfix的操作过程,可以发现在postfix操作中会生成一个临时变量,而这一临时变量是会占用额外的时间和开销的。 // prefix form: increment and fetch 一般情况下不需要区分是先++,还是后++,但是我们在编写程序的时候最好能习惯性的将其写成++i的形式,如在使用STL中的iterator时,prefix与postfix会有相当大的性能差异。请不要小看这些细节,实际在编写程序的时候,若不注意具体细节,你会发现程序的性能会非常的低。但要注意,虽然在大多数情况下可以用prefix来代替postfix,但有一种情况例外,那就是有[]操作符时,比如gzArray [++index] 是不等于 gzArray[index++]的。 |
正在阅读:C++程序设计最佳实践C++程序设计最佳实践
2005-07-19 10:03
出处:
责任编辑:moningfeng
键盘也能翻页,试试“← →”键
相关文章
visual c++ 6.0怎么编译运行?visual c++ 6.0编译运行教程
visual c++ 6.0怎么用?visual c++ 6.0使用方法
vs2015中文旗舰版编写c++程序的操作教程
vc++6.0(Visual C++)的使用操作步骤
visual c++ 6.0怎么显示行号
visual c++ 2008运行库怎么装在c盘 visual c++ 2008运行库装在c盘的方法
microsoft visual c++ 2008怎么安装 microsoft visual c++ 2008安装方法
Visual Studio 2010编写C++程序的具体步骤
vc++6.0Visual C++进行安装的操作过程讲解
Notepad++配置C++环境的操作步骤