改善C++代码的学习笔记1

来源:互联网 发布:天盾数据恢复软件 编辑:程序博客网 时间:2024/06/05 01:03

在查看相关资料后,收获颇丰,对于我这样的C++小民来说,这些东西简直是太有用了!

1、main函数的使用

对于C++而言,采用标准的int main()或者int main(int argc,char *argv[])很有必要,虽然有些不规范的形式在VC++6.0等里也会支持,但是要跨平台运行时,可能就会出现问题,不要到时怀疑C++的跨平台性哦!

2、良好的运算符习惯

曾经我经常写下这样的语句if(a=0),那时总找不到错,经常问老师,现在虽然不会了。可是有时打字快了的时候我也会犯下这样的错误,一个好的习惯就是将它改为if(0==a),这样的话哪怕打字打快了,编译器也不会通过if(0=a)这样的错误语句。

3、表达式不吝啬括号

本人曾经写下这样的语句if(a&b==c),我本以为是if((a&b)==c)。但其实计算机并不这样想,它认为是if(a&(b==c)),究其原因,还是自己过于相信已经知道运算符的优先级。当然了,有很多其它类似的例子也是出现这种不应该的错误,一个好的习惯就是用括号将自己的意图表达出来

4、评估求值顺序莫乱

当我知道这么一回事时,不得不惊叹原来还有这么一说!如果我们曾写下a=F1()+F2()*F3()这样的语句,计算机不能保证F2()一定就比F3()先运算,如果F2()里有某些变量是与F3()共用的,那就会产生一些很隐蔽的错误了。不要依赖于计算顺序,用显示的方法将其顺序固定,如int tmp1=F2()、int tmp2=F3()、a=F1()+F2()*F3(),这样就指定了计算顺序为F2()→F3()→F1()。

5、宏陷阱

刚学C++的时候,老师给我们讲了#define sub(a,b) a-b这个经典的例子,当时没怎么注意里面包含的陷阱,如今有所体会了。如果定义的宏遇上了c*sub(a,b),字符展开为c*a-b,显然背离了我们的初衷。此类的问题还有许多,究其原因,大多都是宏的替代机制引起的。下面记录一些建议以供参考,①使用完备的括号②参数尽量不变化③用括号将宏定义的表达式总括。

6、防范内存溢出

最近经常遇上数组越界的问题,致使内存释放时出问题。很显然,内存溢出的危害很大,在进行相关的数据处理时,特别要小心边界数据的问题,同时也要注意未经初始化失效后没置NULL的指针。

原创粉丝点击