最近,看到一些编程技巧有意无意的去使用,然而这些技巧看起来很华丽,但有碍于良好的编程习惯。
比如在输出一个数组时,可以有以下两种写法:
for (int i = 0; i < len; ++i) //良好的习惯
cout << arr[i] << endl;
for (int i = 0; i < len; cout << arr[i++] << endl);//不好的习惯
虽然第二个看起来更加简洁,如果一直使用这些技巧的话,对于一些新手来说看懂这些是代码有点困难,对与代码的维护也就增加了难度。
1.BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)
这就能看出一个人的内功如何了。
虽然bool,int,指针变量都可写成 if(!var)这种形式,但这并不能体现出其实际含义。正确的写法为bool:if(!var)int:if(var==0)指针变量:if(var==NULL)另外,float变量应该为float x=0.00001; if((var<=x)&&(var>=x)) 因为float并不精确,如果写成if(var==0.0)这是错的,应该设法变成<=和>=比较2.善用assert()函数
在处理一些参数时。特别是在对参数进行一些操作前,我们需要对参数进行一些判断,确保参数可以继续进行操作。特别是指针形形参。如下例:
char * strcpy( char *strDest, const char *strSrc ) { assert( (strDest != NULL) && (strSrc != NULL) ); char *address = strDest; while( (*strDest++ = * strSrc++) != '\0' ); return address; }
这么做的好处就是对于不满足条件的参数不进行操作,就如上面的例子,避免了当strDest和strSrc为空时对这两个参数进行操作。善于使用assert()可以体现一个程序员缜密的逻辑。
3.善于使用引用
引用说白了就是给参数取一个别名,然后通过操作别名来实现对参数的操作。请看下面例程:上面例程中第一个使用了引用,第二个使用了指针,虽然函数最后实现的效果是一样的,效率就不一样了。第一个程序使用了引用,所以函数只需要开辟一块空间给tmp就行啦!而第二个例程中就需要开辟三块空间分别给tmp,a,b这三个参数。因为a,b是指针来的,指针需要内存空间。void swap(int &a, int &b) { int tmp; tmp = a; a = b; b = tmp; } void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; }